问题描述
根据documentation,在以下情况下,const randomBetween = (min,max) => Math.floor(Math.random()*(max-min+1)+min);
const color = [
randomBetween(0,255),randomBetween(0,];
console.log(color);
document.body.style.background = `rgb(${color[0]},${color[1]},${color[2]})`;
会抛出Type.GetProperty(string,BindingFlags)
:
我正在寻找一个示例类型,其中会抛出AmbiguousMatchException
方法,因为发现多个具有相同名称的属性。我创建了一个继承关系(GetProperty
),其中两个类都使用A : B
定义了相同的命名公共属性(使用new
关键字),但是不会抛出异常。
解决方法
在C#中,一个类可以实现多个索引器,所有这些索引器都称为Item
。
public class Class1
{
public string this[int firstParameter]
{
get { return ""; }
}
public string this[string firstParameter,int secondParameter]
{
get { return ""; }
}
}
然后您可以使用以下方法产生异常:
class Program
{
static void Main()
{
// This will throw AmbiguousMatchException:
typeof(Class1).GetProperty("Item",BindingFlags.Public | BindingFlags.Instance);
}
}
这将产生具有单个类的AmbiguousMatchException
以及Public
和Instance
绑定标志。
这是一个使用BindingFlags.FlattenHierarchy
的示例,该示例导致静态属性和实例属性之间发生名称冲突。
public class Program
{
public class A
{
public static string Property { get; set; }
}
public class B : A
{
public string Property { get; set; }
}
public static void Main(string[] args)
{
var type = typeof(B);
var property = type.GetProperty(
"Property",BindingFlags.Public |
BindingFlags.Static |
BindingFlags.Instance |
BindingFlags.FlattenHierarchy);
}
}
,
如果您将与=ABS(YEARFRAC(A1,EOMONTH(A1,12-MONTH(A1)),1)+YEAR(B1)-YEAR(A1)-1+YEARFRAC(B1,EOMONTH(B1,-MONTH(B1)),1))
一起玩,则可能会导致模棱两可的比赛。例如,BindingFlags
允许您获得此异常,尽管它没有具有相同名称的属性:
BindingFlags.IgnoreCase
接下来用class MyClass
{
public string MyProperty {get; set;}
public int Myproperty {get; set;}
}
typeof(MyClass).GetProperty("MyProperty",BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase)
进行设置也会产生上述错误:
BindingFlags.FlattenHierarchy