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

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

最佳答案

假设您有:

dynamic eo = new ExpandoObject();

那么显然如果您通过C#语法扩展对象,则需要遵循C#规则,例如:
eo.ValidCSharpIdentifier = 42;
eo._OK = 42;
eo.æ = 42;

但是,如果通过强制转换为eo来扩展IDictionary<,>,则可以使用其他字符:
((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);

如我们所见,奇怪的标识符是可能的。但是,该字符串必须是一个对象,因此无法使用null引用(如.Add(null, 42) /* illegal */一样)。

使用的名称似乎没有限制。字符串键似乎与序数字符串比较进行了比较,例如EqualityComparer<string>.DefaultStringComparer.Ordinal

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

关于c# - 动态对象的特殊字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16444812/

10-12 04:06