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