gpt4 book ai didi

c# - 获取一个字符串以在 C# 中引用另一个字符串

转载 作者:可可西里 更新时间:2023-11-01 08:36:27 27 4
gpt4 key购买 nike

我有 C++ 背景。以前有人问过这个问题,但我可能无法找到答案。假设我有:

string[] ArrayOfReallyVeryLongStringNames = new string[500];
ArrayOfReallyVeryLongStringNames[439] = "Hello world!";

我可以创建一个引用上述内容的字符串吗(这些都不会编译):

string a = ref ArrayOfReallyVeryLongStringNames[439];  // no compile
string a = &ArrayOfReallyVeryLongStringNames[439]; // no compile

我明白字符串在 C# 中是不可变的。我还了解到您无法获取托管对象的地址。

我想这样做:

a = "Donkey Kong";  // Now ArrayOfReallyVeryLongStringNames[439] = "Donkey Kong";

我已经阅读了堆栈溢出问题 Make a reference to another string in C# 这有一个很好的答案,但问题略有不同。我不想通过引用将此参数传递给函数。我知道如何使用“ref”关键字通过引用传递参数。

如果答案是“您不能在 C# 中执行此操作”,是否有方便的解决方法?

编辑:一些答案表明问题不清楚。让我们换一种方式来问。假设我需要操作原始长命名数组中具有素数索引的所有项目。我想将别名添加到数组...[2]、数组...[3]、数组...[5] 等到列表中。然后,使用“for”循环修改列表中的项目(可能通过将刚创建的列表传递给函数)。

在 C# 中,“using”关键字为类或命名空间创建别名。然而,从答案看来,不可能为变量创建别名。

最佳答案

您可以创建一个包装器来保留对底层数组和字符串索引的引用:

public sealed class ArrayStringReference
{
private readonly string[] _array;
private readonly int _index;

public ArrayStringReference(string[] array, int index)
{
_array = array;
_index = index;
}

public string Value
{
get
{
return _array[_index];
}

set
{
_array[_index] = value;
}
}

public override string ToString()
{
return Value;
}
}

然后这将起作用:

    string[] ArrayOfReallyVeryLongStringNames = new string[500];
ArrayOfReallyVeryLongStringNames[439] = "Hello world!";

var strRef = new ArrayStringReference(ArrayOfReallyVeryLongStringNames, 439);
Console.WriteLine(ArrayOfReallyVeryLongStringNames[439]); // Outputs "Hello world!"
strRef.Value = "Donkey Kong";
Console.WriteLine(ArrayOfReallyVeryLongStringNames[439]); // Outputs "Donkey Kong"

您可以通过提供隐式字符串运算符使它更方便使用,这样您就不必使用 .Value 来访问底层字符串:

// Add this to class ArrayStringReference implementation

public static implicit operator string(ArrayStringReference strRef)
{
return strRef.Value;
}

然后不必像这样访问底层字符串:

strRef.Value = "Donkey Kong";
...
string someString = strRef.Value;

你可以这样做:

strRef.Value = "Donkey Kong";
...
string someString = strRef; // Don't need .Value

这只是语法糖,但它可能会让在现有代码中开始使用 ArrayStringReference 变得更容易。 (请注意,您仍然需要使用 .Value设置底层字符串。)

关于c# - 获取一个字符串以在 C# 中引用另一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com