c# – 动态对象的特殊字符?

我可以用来为动态对象创建属性的字符类型有任何限制吗?

是否有我无法使用的字符列表(例如/ * @)?

最佳答案
假设你有:

dynamic eo = new ExpandoObject();

那么很明显,如果你通过C#语法扩展对象,你需要遵循C#规则,例如:

eo.ValidCSharpIdentifier = 42;
eo._OK = 42;
eo.æ = 42;

但是如果你通过转换为IDictionary<,>来扩展eo,那么你可以使用其他字符:

((IDictionary<string, object>)eo).Add("NotValidC#Identifier", 42);
((IDictionary<string, object>)eo).Add("42", 42);
((IDictionary<string, object>)eo).Add("/", 42);
((IDictionary<string, object>)eo).Add("*", 42);
((IDictionary<string, object>)eo).Add("@", 42);
((IDictionary<string, object>)eo).Add("", 42);

如我们所见,奇怪的标识符是可能的.字符串必须是对象,因此不能使用空引用(如.Add(null,42)/ * illegal * /).

似乎对使用的名称没有限制.字符串键似乎与序数字符串比较进行比较,如EqualityComparer< string> .Default或StringComparer.Ordinal.

当然,与C#规则相比,某些.NET语言对名称中的有效字符有不同的规则.

转载注明原文:c# – 动态对象的特殊字符? - 代码日志