Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不确定型变量_C# - Fatal编程技术网

C# 不确定型变量

C# 不确定型变量,c#,C#,我有一个类,它包含一个不确定类型的变量,必须在运行时重写它,我如何才能做到这一点 很抱歉问了这么恶心的问题 例如: 在运行时,变量TypeValue应该确定变量值的类型根据您实际的意思,您应该使用var或dynamic var关键字只是让编译器决定您实际使用的类型。如果您将要分配的数据在运行时是真正动态的,那么它对您没有多大好处。你应该把var看作是语法上的糖分,即使它有时是非常非常有用的糖分——也就是说,它只会帮你省去打字 dynamic关键字允许您创建真正动态的对象,也就是说,无论您尝试为其

我有一个类,它包含一个不确定类型的变量,必须在运行时重写它,我如何才能做到这一点

很抱歉问了这么恶心的问题 例如:


在运行时,变量TypeValue应该确定变量值的类型

根据您实际的意思,您应该使用var或dynamic

var关键字只是让编译器决定您实际使用的类型。如果您将要分配的数据在运行时是真正动态的,那么它对您没有多大好处。你应该把var看作是语法上的糖分,即使它有时是非常非常有用的糖分——也就是说,它只会帮你省去打字

dynamic关键字允许您创建真正动态的对象,也就是说,无论您尝试为其分配什么,都不会得到编译器或运行时错误。当您尝试调用一个不存在的属性时,运行时错误将在以后发生。这本质上是你告诉编译器,嘿,听着,不要对这个对象大惊小怪,允许我给它赋值,调用它的任何东西。如果我搞砸了,那是我的问题,不是你的

我想每当你想到使用动态时,你应该考虑手边的问题,看看它能否以更好的方式来解决接口、泛型等等。

< P>听起来好像你是在仿效泛型:

class Foo<T>
{
    public T Value { get; set; };
}
然后可以为不同类型创建实例:

Foo<string> x = new Foo<string>();
x.Value = "fred";

Foo<int> y = new Foo<int>();
y.Value = 10;
这仍然是在编译时修复类型,但是在编译使用该类型的代码时

var在这里是完全错误的-var只是用于。特别是,不能将其应用于字段

你可能想要动态的,但目前你的问题还不太清楚

我知道这必须使用关键字var来完成

不,那不是var做的。有三件事会让你突然想到:

对象可以存储任何内容,但需要反射才能执行任何有用的操作 动态对象的一种特殊情况,其中编译器执行伏都教,以便在运行时解析obj.SomeMethod等 泛型,即类为SomeType,变量类型为T;泛型约束可以通过声明它必须具有的特性和接口使此T更可用 var的目的是引用任何东西,而不是声明任何东西。反过来说

我只利用System.Dynamic.ExpandooObject C 4完成了一次!,它允许在不声明属性的情况下随意添加属性,并且它们将在运行时得到解析。它类似于PHP处理对象的方式,我非常喜欢它

一个简单的例子:

dynamic myObject = new ExpandoObject();
myObject.myProperty = "You can declare properties on-the-fly inside me !";
Console.WriteLine(myObject.myProperty);

var在编译时是已知的。你需要动力吗?你的问题很不清楚。请阅读,因为他说必须在运行时重写变量,我认为他已经有了一些传入的对象/数据,也就是说,声明一个新的显式对象可能不是他想要的。好吧,我想我们永远也不会知道。我怎么能将这一点应用到我的示例中??
dynamic myObject = new ExpandoObject();
myObject.myProperty = "You can declare properties on-the-fly inside me !";
Console.WriteLine(myObject.myProperty);