C# 如何在c中检查变量是否包含实例或类型#
我有一个班级C# 如何在c中检查变量是否包含实例或类型#,c#,windows-store-apps,C#,Windows Store Apps,我有一个班级考试 public class Test { } 现在我有了一个变量object1,它保存了Test的一个实例 object object2 = new Test(); // some code object2 = typeof(Test); object2将在不同的场景中接受Test类的类型和实例。如何检查它的值。i、 e.测试的实例或测试的类型 if (object2 is Test) { ... } if (object2 is Type) { ... } 但是不要这
考试
public class Test { }
现在我有了一个变量object1
,它保存了Test
的一个实例
object object2 = new Test();
// some code
object2 = typeof(Test);
object2
将在不同的场景中接受Test
类的类型和实例。如何检查它的值。i、 e.测试的实例
或测试的类型
if (object2 is Test) { ... }
if (object2 is Type) { ... }
但是不要这样做。如果没有测试,您可以检查它
if (object2 is Test) // .. we have an instance of Test
else if (object2 == typeof(Test)) // we have the second case
顺便说一句:这是一个糟糕的设计,我想作为一个变量应该是为了一个确切的目的而引入的。如果(object2是Type){…}
//当object2是TypeType
if(object2是Test){…}
//当object2的类型为Test
时。。因此保存了一个实例您也可以使用my library():
var object2Type = object2 as Type;
if (object2Type != null)
{
// Do something
}
else
{
var object2Test = (Test)object2;
// Do something else
}
或
object2.DetermineType()
.When(目标=>{/*要执行的操作*/})
.When(目标=>{/*要执行的操作*/})
.Resolve();
但是,如果必须这样确定类型,那么您的设计可能不好。这听起来像是一个可怕的设计缺陷,您这样做的目的是什么?实际上,我正在编写一个框架,如果实例不存在,它将自动解析类型。上面的代码片段只是一个模拟来解释场景
是typeof
?真的吗?你的库将被下一个版本的C#淘汰。。。提出了新的语法if(foo是Bar)
。也许吧,但有些人(像我一样)还是更喜欢Fluent语法:)Fluentif
和FluentWhile
的库在哪里?世界完全需要它们。Fluent API是一种替代品,而不是某些问题的替代品。如果你不喜欢它们,就不要;我不能用它。
object2.DetermineType()
.When((Test target) => { /* action to do */ })
.When((Type target) => { /* action to do */ })
.Resolve();
object2.DetermineType()
.When<Test>(target => { /* action to do */ })
.When<Type>(target => { /* action to do */ })
.Resolve();