Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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#_Pointers_Tuples - Fatal编程技术网

c#-如何使指针指向元组?

c#-如何使指针指向元组?,c#,pointers,tuples,C#,Pointers,Tuples,假设我定义了一个元组,如下所示 public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def"); publictuplecvalues=新元组(“abc”、“def”); 如何定义另一个变量作为指向上述元组的指针?有没有办法做到这一点?元组是一个类而不是结构。因此,变量是指针。元组是类而不是结构。因此,您的变量是指针。在.NetTuple中,Tuple是一个不可变的引用类-它

假设我定义了一个元组,如下所示

public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def");
publictuplecvalues=新元组(“abc”、“def”);

如何定义另一个变量作为指向上述元组的指针?有没有办法做到这一点?

元组是一个类而不是结构。因此,变量是指针。

元组是类而不是结构。因此,您的变量是指针。

在.Net
Tuple
中,Tuple是一个不可变的引用类-它基本上已经相当于指针,并且无法更改值,您只能创建一个新的引用类

您可以使用
ref
关键字来确保分配了新实例

var CValues = new Tuple<string, string>("abc", "def");

void ChangeCValues(ref Tuple<string, string> input) 
{
     values = new Tuple<string, string>(input.Item1 + "_x", input.Item2 + "_y")
}

你想干什么

如果确实需要可变实例,则可以创建自己的类:

class MyMutableTuple<T1, T2> {
    public T1 Item1 {get; set;}
    public T2 Item2 {get; set;}
}

var CValues = new MyMutableTuple<string, string>("abc", "def");

CValues.Item1 = "ghi"; // Works!
类MyMutableTuple{
公共T1项1{get;set;}
公共T2项2{get;set;}
}
var CValues=新的MyMutableTuple(“abc”、“def”);
CValues.Item1=“ghi”//作品

在.Net
中,Tuple
是一个不可变的引用类-它基本上已经相当于一个指针,无法更改值,只能创建一个新的值

您可以使用
ref
关键字来确保分配了新实例

var CValues = new Tuple<string, string>("abc", "def");

void ChangeCValues(ref Tuple<string, string> input) 
{
     values = new Tuple<string, string>(input.Item1 + "_x", input.Item2 + "_y")
}

你想干什么

如果确实需要可变实例,则可以创建自己的类:

class MyMutableTuple<T1, T2> {
    public T1 Item1 {get; set;}
    public T2 Item2 {get; set;}
}

var CValues = new MyMutableTuple<string, string>("abc", "def");

CValues.Item1 = "ghi"; // Works!
类MyMutableTuple{
公共T1项1{get;set;}
公共T2项2{get;set;}
}
var CValues=新的MyMutableTuple(“abc”、“def”);
CValues.Item1=“ghi”//作品


你想做什么?
CValuesReference
不是“参考”吗?你的意思是你想要这样的东西:
var whatever=CValuesReference
?你想要一个对元组的引用——它是不可变的——还是对变量的引用——它是可变的?不要混淆它们;这些是不同的事情。你不能改变袜子的颜色,但你可以把不同的袜子放在抽屉里。你想引用袜子还是抽屉?@Rama类
元组
是不可变的-其属性无法更改。变量
CValues
是可变的-它可以分配给其他对象。因此,您可以将其指向黄色厚袜子或红色轻袜子(您可以更改其指向的内容),但不能将其更改为绿色。@Rama:没有名为CValues的元组。元组不是有名称的东西。有一个名为CValues的变量,该变量包含对元组的引用。您可以更改CValues的值;这是一个变量,它可能会变化。你想做什么?是否
CValuesReference
不是“引用”?你的意思是你想要这样的东西:
var whatever=CValuesReference
?你想要一个对元组的引用——它是不可变的——还是对变量的引用——它是可变的?不要混淆它们;这些是不同的事情。你不能改变袜子的颜色,但你可以把不同的袜子放在抽屉里。你想引用袜子还是抽屉?@Rama类
元组
是不可变的-其属性无法更改。变量
CValues
是可变的-它可以分配给其他对象。因此,您可以将其指向黄色厚袜子或红色轻袜子(您可以更改其指向的内容),但不能将其更改为绿色。@Rama:没有名为CValues的元组。元组不是有名称的东西。有一个名为CValues的变量,该变量包含对元组的引用。您可以更改CValues的值;这是一个变量,它可能会有所不同。我的问题是,如果想要另一个指向它的指针使用不同的名称,该怎么办?将
公共元组ptr=CValues工作?在C#这样既有and又有and的语言中,应始终避免为其中一个使用错误的名称。这个变量是一个引用。@Rama:我知道一个很好的方法:试试看。你为什么问我们那个程序片段是做什么的?编写代码并运行它,然后你就会知道它是做什么的。我的问题是,如果你想要另一个指向它的指针使用不同的名称怎么办?将
公共元组ptr=CValues工作?在C#这样既有and又有and的语言中,应始终避免为其中一个使用错误的名称。这个变量是一个引用。@Rama:我知道一个很好的方法:试试看。你为什么问我们那个程序片段是做什么的?编写代码并运行它,然后你就会知道它是做什么的。这个答案为我澄清了很多误解。我现在唯一的疑问是,我是否可以使用
altValues
更改
CValues
中包含的值而不使用ref.@Rama您无法更改
CValues
中包含的值-您可以创建一个新的
元组并分配它,但您无法更改值。是的,我明白了。但是创建一个新元组并将其分配给
altValues
不会改变
CValues
对吗?那是我的problem@Rama这是正确的。您可以使用
ref
关键字将新实例分配给
CValues
,但仅此而已。你想干什么
Tuple
是一个轻量级的不可变返回类,通常不会将其用作公共属性。为什么不编写您自己的类,它可以按照您想要的方式进行修改呢?因为我正在编写以前编写的代码,所以无法定义自己的类。无论如何,谢谢你的建议。我找到了一个解决办法,通过它我可以给
CValues
本身@keith分配一个新的元组。这个答案为我澄清了很多误解。我现在唯一的疑问是,我是否可以使用
altValues
更改
CValues
中包含的值而不使用ref.@Rama您无法更改
CValues
中包含的值-您可以创建一个新的
元组并分配它,但您无法更改值。是的,我明白了。但是创建一个新元组并将其分配给
altValues
不会改变
CValues
对吗?那是我的problem@Rama