【发布时间】:2010-12-14 14:17:29
【问题描述】:
我是 C# 新手。
我知道在 vb.net,我可以这样做:
Dim guid as string = System.Guid.NewGuid.ToString
在 C# 中,我正在尝试做
String guid = System.Guid.NewGuid().ToString;
但我收到“无法将方法组 'ToString' 转换为非委托类型 'string'。您是否打算调用该方法?”错误。
【问题讨论】:
我是 C# 新手。
我知道在 vb.net,我可以这样做:
Dim guid as string = System.Guid.NewGuid.ToString
在 C# 中,我正在尝试做
String guid = System.Guid.NewGuid().ToString;
但我收到“无法将方法组 'ToString' 转换为非委托类型 'string'。您是否打算调用该方法?”错误。
【问题讨论】:
您在ToString 之后缺少(),它将其标记为函数调用与函数引用(传递给委托的那种),这就是为什么c# 没有AddressOf 运算符,这是暗示的根据你的输入方式。
试试这个:
string guid = System.Guid.NewGuid().ToString();
【讨论】:
根据MSDN,方法Guid.ToString(string format)根据提供的格式说明符返回此Guid实例值的字符串表示形式。
例子:
guidVal.ToString() 或 guidVal.ToString("D") 返回 32 个十六进制数字
用连字符分隔:00000000-0000-0000-0000-000000000000
guidVal.ToString("N") 返回 32 个十六进制数字:00000000000000000000000000000000
guidVal.ToString("B") 返回由连字符分隔的 32 个十六进制数字,用大括号括起来:{00000000-0000-0000-0000-000000000000}
guidVal.ToString("P") 返回由连字符分隔的 32 个十六进制数字,括在括号中:(00000000-0000-0000-0000-000000000000)
【讨论】:
以下是每个格式说明符的输出示例:
N: cd26ccf675d64521884f1693c62ed303
D: cd26ccf6-75d6-4521-884f-1693c62ed303
B: {cd26ccf6-75d6-4521-884f-1693c62ed303}
P: (cd26ccf6-75d6-4521-884f-1693c62ed303)
X: {0xcd26ccf6,0x75d6,0x4521,{0x88,0x4f,0x16,0x93,0xc6,0x2e,0xd3,0x03}}
默认为D。
【讨论】:
在 Visual Basic 中,您可以调用不带大括号的无参数方法 (())。在 C# 中,它们是强制性的。所以你应该写:
String guid = System.Guid.NewGuid().ToString();
没有大括号,您将方法本身(而不是其结果)分配给变量guid,显然该方法无法转换为String,因此会出现错误。
【讨论】:
String guid = System.Guid.NewGuid().ToString();
否则它是一个委托。
【讨论】:
你需要
String guid = System.Guid.NewGuid().ToString();
【讨论】:
你写了吗
String guid = System.Guid.NewGuid().ToString;
或
String guid = System.Guid.NewGuid().ToString();
注意括号。
【讨论】:
ToString 末尾缺少 ()。
【讨论】:
Guid guidId = Guid.Parse("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
string guidValue = guidId.ToString("D"); //return with hyphens
【讨论】:
遵循声纳规则,您应该尽可能保护自己,并使用
System.globalisation 尽可能像 DateTime.ToString()。
所以关于你可以使用的其他答案:
guid.ToString("", CultureInfo.InvariantCulture)
"" 可以替换为:N、D、B、P 和 X,更多信息请参见this comment。
例如here
【讨论】: