你不能这样做(如你所知)。因此,一些解决方法:
您可以通过传递初始对象来做到这一点,因为它将是一个引用类型
var a = DoThis(obj);
public async Task DoThis(object obj) //replace the object with the actual object type
{
obj.value = 10;
}
编辑
根据您的评论,创建一个接口并让您的类实现它(假设它始终是您想要传递的相同类型)。然后您可以传递共享的界面(可能过度杀死,取决于您的需求,甚至是不切实际的工作量)。
或者,提供具有该属性的基类!(我不喜欢这个建议,但既然你要求的是一些无法完成的事情,尽管我不推荐它,但它可能就足够了)。
界面示例在这里(不使用您拥有的,但使用 Colsone 应用程序足够接近)
using System;
namespace InterfacesReferenceTypes
{
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
DoThis(mc);
Console.WriteLine(mc.Number);
Console.ReadKey();
}
static void DoThis(IDemo id)
{
id.Number = 10;
}
}
class MyClass : IDemo
{
//other props and methods etc
public int Number { get; set; }
}
interface IDemo
{
int Number { get; set; }
}
}
编辑2
在下一个评论之后,您仍必须使用接口,但之后重新分配值。我确信有更好的方法可以做到这一点,但这有效:
using System.Text;
namespace InterfacesRerefenceTypes
{
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
Console.WriteLine(mc.Number);
mc.val1 = 3;
mc.val2 = 5;
mc.Number = mc.val2;
DoThis(mc);
mc.val2 = mc.Number;
Console.WriteLine(mc.val2);
Console.ReadKey();
}
static void DoThis(IDemo id)
{
id.Number = 15;
}
}
class MyClass : IDemo
{
public int val1 { get; set; }
public int val2 { get; set; }
public int Number { get; set; }
}
interface IDemo
{
int Number { get; set; }
}
}