我在哪里可以找到合适的领域?

时间:2015-10-02 09:45:38

标签: c# types field instance primitive

我有两行简单的代码。

int x = 12 * 30;
MessageBox.Show(x.ToString());

第一行:我理解x是int类型的instance

第二行:所以,我使用了int类型的ToString方法。

问题:

如何在不使用int类型的“field”的情况下将值12*30放入实例x

如何在不使用int类型的“field”的情况下从实例12*30获取值x

我现在错过了什么吗?

问候

编辑1)

也许,我没有让自己清楚。

我想以不同的方向阐明我的问题。

对于第一行)我听说“x”是int类型的实例。 (Nutshell第15页中的C#5.0“预定义类型示例”)。而且我认为,实例不能直接具有任何类型的值(int / string,无论何种类型)。所以,我认为需要一个字段来设置一个值。这是我的第一个问题。

编辑2)

第二个问题与第一个问题基本相同。实例“x”现在有价值(在其中的某个地方,我不知道它在哪里,值是360)。正如您所看到的,它以“instance.method”风格取得了良好的效果。我认为它的风格应该是“field.method”。这是我的第二个问题(虽然我对第二个问题有某种共识)。

编辑3)

我只是怀着疑惑的心情提出问题。我不想做任何奇怪的路线来完成某些事情。我只是想知道即使没有任何“FIELD”它也能很好地工作。它与其他类型的(正常)工作方式不一致。这太令人困惑了。

4 个答案:

答案 0 :(得分:3)

我认为你错过了assignment operator所做的事情。

  

它将右操作数的值赋给左操作数给出的变量,属性或索引器元素。

换句话说,x不包含12 * 30,它包含结果

因此,如果您希望消息框显示确切的字符串"12 * 30",那么您还需要在字符串中设置此值,周围的库可以尝试将此字符串解密为数学公式以进行检索它的结果,但既然已经有了这个,你可以从中创建一个字符串。

int x = 12;
int y = 30;
int z = x * y;
MessageBox.Show(String.Format("{0} * {1} = {2}", x, y, z));

在回答第二个问题时,你不能这样做。您的变量x(我的z)不了解为了赋予其值而执行的操作。唯一的知识"它真的有,它的当前价值是什么。

答案 1 :(得分:2)

显然,int没有一个字段来放置它所存储数字的因子。

好的,所以第一个问题:您可以将内容放入变量中,因为它是intint变量应该存储数字,因此您可以使用数字文字,例如5作为该变量的值。在你的情况下,你没有将12 * 30放入变量,你将结果 12 * 30放入变量,即360.它就像:

int x = 360;

他们完全相同。无需使用Int32类型的字段。

第二个问题:你做不到。正如我之前所说,你将360放入变量,而不是乘法表达式。这意味着变量不知道当你为变量分配360时,你实际上使用了12 * 30.它只知道你要存储360.这就是全部。因此,如果要将表达式存储在变量中,请不要使用int。相反,使用表达式树。 Jon Skeet的书,C#In Depth,介绍表达式树,你可以看一下。

编辑:

现在你说得更清楚了,我可以告诉你int确实有一个字段,但它是私有的。您可以访问referencesource.microsoft.com查看int的源代码。但为什么你只是给一个int赋值?因为那是原始类型的美。他们只是让你这样做。这都是关于CLR的。

答案 2 :(得分:1)

将x更改为键入字符串并使用您想要的值初始化它:

string x = (12 * 30).ToString();
MessageBox.Show(x);

......或者你想要

string x = "12 * 30";

答案 3 :(得分:-1)

MessageBox.Show((12 * 30).ToString());