我想确定是否将MyBindingSource.DataSource
分配给设计器集Type
,或者是否已为其分配了对象实例。这是我目前(相当丑陋)的解决方案:
Type sourceT = MyBindingSource.DataSource.GetType();
if( sourceT == null || sourceT.ToString().Equals("System.RuntimeType") ) {
return null;
}
return (ExpectedObjType) result;
System.RuntimeType
是私有且不可访问的,所以我不能这样做:
Type sourceT = MyBindingSource.DataSource.GetType();
if ( object.ReferenceEquals(sourceT, typeof(System.RuntimeType)) ) {
return null;
}
return (ExpectedObjType) result;
我只是想知道是否存在更好的解决方案?特别是不依赖于Type
名称的那个。
答案 0 :(得分:1)
由于System.RuntimeType
来自System.Type
,您应该可以执行以下操作:
object result = MyBindingSource.DataSource;
if (typeof(Type).IsAssignableFrom(result.GetType()))
{
return null;
}
return (ExpectedObjType)result;
或者更简洁:
object result = MyBindingSource.DataSource;
if (result is Type)
{
return null;
}
return (ExpectedObjType)result;
巧合的是,这是采用的方法here。
答案 1 :(得分:1)
你没有ToString()它;你应该能够通过GetType()访问它的名字(这几乎是一样的)。无论哪种方式,因为它是一个私有类,并且无法从开发人员代码访问,我认为如果你需要验证它是否是一个特定的RuntimeType,你就会被一个“魔术字符串”所困扰。并非所有“最佳解决方案”都如我们所希望的那样优雅。
如果您获得的所有Type参数实际上都是RuntimeType对象,则可以按照另一个答案中的建议查找基类。但是,如果你可以收到一个不是RuntimeType的Type,你会得到一些“误报”。