我将把我的问题总结为以下代码片段.
List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常.
现在我尝试了以下内容
dynamic dList = list;
Console.WriteLine(dList.First());
Run Code Online (Sandbox Code Playgroud)
但是我得到了RuntimeBinderException.为什么会这样?
C#不区分大小写的List.Contains():方法'Contains'的重载没有2个参数
如果我们这样做,就会得到编译器错误
list.Contains(stringToSearchDynamic.ToString(), StringComparer.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
但是如果我们把实际字符串编译好
list.Contains(stringToSearch, StringComparer.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
这是编译器错误吗?
码:
List<string> list = new List<string>();
list.Add("one");
list.Add("two");
string stringToSearch = "OnE";
dynamic stringToSearchDynamic = "OnE";
//compiles OK
bool isContained = list.Contains(stringToSearch, StringComparer.OrdinalIgnoreCase);
//Does NOT compile
isContained = list.Contains(stringToSearchDynamic.ToString(), StringComparer.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)