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是Type
Type


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语法:)Fluent
if
和Fluent
While
的库在哪里?世界完全需要它们。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();