相关疑难解决方法(0)

是否可以在C#中返回对变量的引用?

我可以返回对double值的引用吗?

这就是我想要做的:

ref double GetElement()
{
   ......
   // Calculate x,y,z
   return ref doubleArray[x,y,z];
}
Run Code Online (Sandbox Code Playgroud)

要像这样使用它

void func()
{
   GetElement()=5.0;
}
Run Code Online (Sandbox Code Playgroud)

这就像在C++中返回一个双指针......我知道我写它的方式是错误的......但是有没有正确的方法呢?

c# reference return-value

29
推荐指数
4
解决办法
3万
查看次数

获取一个字符串以引用C#中的另一个

我来自C++背景.之前已经问过这个问题,但试着尽可能找不到答案.比方说我有:

string[] ArrayOfReallyVeryLongStringNames = new string[500];
ArrayOfReallyVeryLongStringNames[439] = "Hello world!";
Run Code Online (Sandbox Code Playgroud)

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

string a = ref ArrayOfReallyVeryLongStringNames[439];  // no compile
string a = &ArrayOfReallyVeryLongStringNames[439];     // no compile
Run Code Online (Sandbox Code Playgroud)

我确实理解字符串在C#中是不可变的.我也明白你无法获得托管对象的地址.

我想这样做:

a = "Donkey Kong";  // Now ArrayOfReallyVeryLongStringNames[439] = "Donkey Kong";
Run Code Online (Sandbox Code Playgroud)

我已经阅读了Stack Overflow问题在C#中引用了另一个字符串, 它有一个很好的答案,但问题略有不同.我不想通过引用将此参数传递给函数.我知道如何使用"ref"关键字通过引用传递参数.

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

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

在C#中,"using"关键字为类或命名空间创建别名.从答案来看,似乎无法为变量创建别名.

c# string

11
推荐指数
2
解决办法
1393
查看次数

我可以在像C++这样的C#函数中使用引用吗?

在C++中我可以这样做:

 int flag=0,int1=0,int2=1;
 int &iRef = (flag==0?int1:int2);
 iRef +=1;
Run Code Online (Sandbox Code Playgroud)

具有int1增加的效果.

我必须修改一些旧的c#代码,如果我可以做类似的事情,那将会非常有用,但我在考虑......也许不是.任何人?

c# reference

6
推荐指数
2
解决办法
1900
查看次数

从C++到C#:永远不会返回对本地对象的引用?

在C++中有一个建议:"永远不要返回对本地对象的引用",如下面引用的"C++ Primer":

"关于返回引用,有一个至关重要的事情要理解:永远不要返回对局部变量的引用.

"当函数完成时,释放分配本地对象的存储.对函数终止后对本地对象的引用是指未定义的内存.请考虑以下函数:

 // Disaster: Function returns a reference to a local object
 const string &manip(const string& s)
 {
      string ret = s;
      // transform ret in some way
      return ret; // Wrong: Returning reference to a local object!
 }
Run Code Online (Sandbox Code Playgroud)

"此函数在运行时将失败,因为它返回对本地对象的引用.当函数结束时,将释放ret所在的存储.返回值指的是程序不再可用的内存."

问题:这仍然适用于C#吗?或者引入GC无关紧要?

c# garbage-collection

5
推荐指数
1
解决办法
1655
查看次数

将引用存储在另一个变量中

我一直在搜索,但我找不到任何方法来存储对某个变量中另一个变量的引用.我正在尝试创建一个类来撤消用户完成的事情;

class UndoAction
{
    public object var;
    public object val;
    public UndoAction(ref object var, object val)
    {
        this.var = var;
        this.val = val;
    }

    public static List<UndoAction> history = new List<UndoAction>();
    public static void AddHistory(ref object var, object val)
    {
        history.Add(new UndoAction(ref var, val));
    }
}
Run Code Online (Sandbox Code Playgroud)

我想你可以看到我在这里想要实现的目标.

我跑的问题;

this.var = var;
Run Code Online (Sandbox Code Playgroud)

不存储引用,而是存储引用的'var'的值.我如何存储引用本身,所以我可以简单地运行;

this.var = val;
Run Code Online (Sandbox Code Playgroud)

在我的情况下,"撤消"一个动作?

.net c# reference

5
推荐指数
1
解决办法
8399
查看次数

ref关键字在C#中返回类型之前的含义是什么

在下面的代码是什么的意义refGetAge()方法签名?

public class Person
{
    private int age;
    public ref int GetAge()
    {
        return ref this.age;
    }
}
Run Code Online (Sandbox Code Playgroud)

c#

4
推荐指数
1
解决办法
328
查看次数

"ref return"是CLR的语言特征或功能

在这个问题中:为什么C#不支持返回引用(以及Web上的其他地方),我无法确定何时ref return引入.NET框架.它只是语法糖吗?

我要问的原因是我们的许多主机都没有安装最新的.NET框架版本(仍然在4.5.2上),我想知道这将如何影响CLR向后兼容性,运行时正确性和性能.

此外,我在哪里可以找到有关较旧的.NET框架如何处理向后兼容性的文档?C#6.0语言规范似乎没有涵盖这个,也许我在某种程度上跳过这个?

.net c# clr

4
推荐指数
1
解决办法
87
查看次数

C#是按引用或值返回的吗?

在以下场景中,"Pool"是按值还是按引用返回的?

private static List<Item> Pool;

public static List<Item> GetPool()
{
    return Pool;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在请求时实现循环遍历列表的能力(这样另一个线程可以在列表中添加/删除项目,但调用线程的列表保持不变,以便foreach循环不会导致异常).如果它是按值返回的,那么它将是它自己的列表,而如果它是一个引用,我仍然有被修改列表的危险.如果有任何问题请纠正我,这只是我的理解

c#

3
推荐指数
2
解决办法
3791
查看次数

为什么C#没有像VB这样的Handles子句?

在VB中,我们有Handles子句,它允许将Handler添加到控件的事件中,而不将其放入xaml文件中(直接放入VB文件中).

XAML:

<Button x:Name="myButton" />
Run Code Online (Sandbox Code Playgroud)

VB:

Private Sub Button_Click() Handles myButton.Click

End Sub
Run Code Online (Sandbox Code Playgroud)

可以使用该做的好处之一是使用Visual Studio的下拉列表中自动添加事件,而不需要去XAML文件,并改变它的可能性.阅读这个问题(和答案),以便更好地理解我在说什么:

Visual Studio 2010显示来自代码的可用事件

这个问题的答案并没有具体说明为什么C#没有在Visual Studio中这个功能,但很明显对我来说:因为它使用了Handles子句对代码隐藏添加事件C#不具备此功能.

我知道我们可以使用+ =并在构造函数上手动添加事件,在InitializeComponent下面(这几乎是同一件事),但是VB也有AddHandler可以在构造函数(以及其他地方)上添加事件,并且它不是自动的,对我来说不如Handles条款可靠.

我的问题是:

为什么它从未实施?这不可靠吗?非安全?有什么解决方法吗?

c# vb.net wpf events xaml

1
推荐指数
1
解决办法
556
查看次数

标签 统计

c# ×9

reference ×3

.net ×2

clr ×1

events ×1

garbage-collection ×1

return-value ×1

string ×1

vb.net ×1

wpf ×1

xaml ×1