Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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# 如何将属性或描述符(如字符串和int/double)分配给对象或项?_C#_Unity3d - Fatal编程技术网

C# 如何将属性或描述符(如字符串和int/double)分配给对象或项?

C# 如何将属性或描述符(如字符串和int/double)分配给对象或项?,c#,unity3d,C#,Unity3d,我对学习C#仍然是个新手。我试图创造一些东西,我需要它的描述符。我在这方面有一些问题已经有一段时间了,在网上搜索并没有产生任何有用的结果 我的问题的理想解决方案如下所示: foo.name = "jar of pickles"; foo.desc = "it appears to be a jar of pickles."; foo.numOfPickles = 10; foo.price = 2.50; 正如你所看到的,“foo”,无论我怎么称呼它,都有一个名字,一个描述,一个量化它的数字和

我对学习C#仍然是个新手。我试图创造一些东西,我需要它的描述符。我在这方面有一些问题已经有一段时间了,在网上搜索并没有产生任何有用的结果

我的问题的理想解决方案如下所示:

foo.name = "jar of pickles";
foo.desc = "it appears to be a jar of pickles.";
foo.numOfPickles = 10;
foo.price = 2.50;
正如你所看到的,“foo”,无论我怎么称呼它,都有一个名字,一个描述,一个量化它的数字和一个价格。然后,我可以将foo放入一个数组中,并像bar[0]那样引用它。使用name返回“jarofpickles”

然而,我无法完成这项工作,因为我不确定键入“foo”作为什么。我试着将其作为对象,但它只是告诉我“名称”在“对象”中没有定义。我想上面是我在定义对象中的名称,但这似乎是一个类型问题

所以我试着用字典来完成这件事

new Dictionary<string, object>
新字典
这正是我想要的,但每次我想引用某个东西时,都会觉得不雅观和粗俗。例如,若要借用此价格对其征税,我必须将其称为(双)条[0].price或更小的动态(双)foo.price。我有很多关于数字和数学的计算,我觉得每一个都不合适,但我可能弄错了

我尝试在字典中使用“dynamic”类型,但没有成功,因为它返回了一个CS1980错误。坦率地说,解决这个问题的办法似乎非常复杂,超出了我的理解。然而,如果这是这个问题的唯一答案,那么我显然别无选择。再说一次,我对C#很陌生,所以我不确定它到底有多大的动态性,它是否与我所说的相关,或者它是否非常、非常相关

我将非常感谢任何帮助我达成接近我所概述的解决方案的人。

这是本书的C#脚本:

public class Foo
{  
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    } 
    // or {get;set;}
    private int price;
    public int Price
    {
        get { return price; }
        set { price = value; }
    }
    //or {get;set;} 

    //and so on ...
}
以及在其他方法中使用类:

  Foo foo1 = new Foo();
  foo1.Name = "test";
  foo1.Price = 3;

  Foo[] fooArray = new Foo[2];
  fooArray[0] = foo1;

unity不是支持JavaScript吗?尝试使用C#as JavaScript将是痛苦的——不妨早点切换……嗨,阿列克谢。谢谢你的回答,但这个问题与JavaScript无关。回答?我没有给出答案,只是评论而已,就像这个答案一样,答案放在答案框里。(我看到Unity3d不再支持“UnityScript”…我想你应该开始喜欢强类型语言了:))这个问题中没有关于JavaScript的内容。我不知道你是从哪里得到这个主意的。该链接是感激的,但对我没有用处。正如你所说,C#是“强类型语言”,我已经听过很多次了,但我仍然不清楚这到底意味着什么以及所有的后果。你是在暗示我所要求的不能用C#完成,因为它是一种强类型语言吗?你所要求的某些变体确实可以完成——你已经列出了你所写内容的所有标准方法作为需求(
Dictionary
dynamics
如果您只需要键入duck,则可以单独使用,如果您想添加属性,则可以与
ExpandoObject
组合使用)…你可以排除它们…基本上有两种方法可以从这里开始-回顾你想要实现的,并尝试将其映射到C#概念,或者开始挖掘你已经列出的特性(注意,你显然无法在运行时将属性添加到现有的强类型对象中…请注意)我相信Unity支持自动实现的属性已经有很长一段时间了——我建议您编辑您的示例以使用它们,因为它将大大减少代码的大小(同样,我建议在第二个代码段中使用对象初始值设定项)非常感谢您的回答。这非常有帮助,而且很有效。但是,我遇到了一个小问题。fooArray[0]。name返回所需的名称。foo1.name返回nullreference异常。进一步检查,这是因为foo1返回“Null”,而fooArray[0]返回“Foo”。有什么原因会发生这种情况吗?请发布您的代码以进行检查。可能您在创建其对象(new Foo())之前使用了foo1,或者它在某个地方变为null。没关系。问题是它被编写为Foo foo1=new Foo();只需将其更改为foo1=new Foo();就完全解决了问题。