有没有可能创建一个C#&x27;指针';到DateTime对象?
是否可以创建一个指向DateTime对象的C#指针?我正在尝试这样做:有没有可能创建一个C#&x27;指针';到DateTime对象?,c#,C#,是否可以创建一个指向DateTime对象的C#指针?我正在尝试这样做: DateTime Event1 = DateTime.Now; DateTime Event2 = DateTime.Now.AddYears(10); DateTime EventPointer; // A Pointer? if (something) { EventPointer = Event1; } else { EventPointer = Event2; } EventPointer.DoSom
DateTime Event1 = DateTime.Now;
DateTime Event2 = DateTime.Now.AddYears(10);
DateTime EventPointer; // A Pointer?
if (something)
{
EventPointer = Event1;
}
else
{
EventPointer = Event2;
}
EventPointer.DoSomething? // Something that would change the value of Event1/2 variable.
DateTime event1 = new DateTime(2011, 10, 11);
DateTime event2 = new DateTime(2021, 10, 11);
Action<DateTime> eventPointer; // A Pointer?
if (true)
{
eventPointer = x => { event1 = x; };
}
else
{
eventPointer = x => { event2 = x; };
}
eventPointer(new DateTime(2016, 10, 11));
Console.WriteLine(event1.ToString(CultureInfo.InvariantCulture));
Console.WriteLine(event2.ToString(CultureInfo.InvariantCulture));
DateTimes是值类型,与引用类型不同,每次您将其值分配给另一个变量时,它们的值都会被复制。指针,正如您所想的那样,在托管C#代码中不存在。如果需要传递日期时间并更改原始值,则可能需要查看
out
和ref
参数。由于日期时间是结构(值类型),因此它们总是被复制而不是通过引用传递,除非您特别使用out
或ref
参数 不直接,但您可以将其包装在类中:
Wrapper w1 = new Wrapper { TheDate = DateTime.Now };
Wrapper w2 = new Wrapper { TheDate = DateTime.Now.AddYears(10) };
Wrapper w;
if (something)
{
w = w1;
}
else
{
w = w2;
}
w.DoSomething();
class Wrapper
{
public DateTime TheDate { get; set; }
public void DoSomething()
{
}
}
DateTime
是一种值类型,当您为其赋值时,该值将被复制。但是,方法可以使用ref
关键字引用值类型。您的EventPointer.DoSomething将使用DateTime作为引用。下面是一个简单的示例,说明如何应用它
var date = DateTime.Today;
MakeMinValue(ref date);
Console.Out.WriteLine("date = {0}", date);
public void MakeMinValue(ref DateTime dateTime)
{
dateTime = DateTime.MinValue;
}
这仅适用于方法参数
不安全的,否则不能在托管代码中使用指针。我建议不要这样做
DateTime Event1 = DateTime.Now;
DateTime Event2 = DateTime.Now.AddYears(10);
DateTime EventPointer; // A Pointer?
if (something)
{
EventPointer = Event1;
}
else
{
EventPointer = Event2;
}
EventPointer.DoSomething? // Something that would change the value of Event1/2 variable.
DateTime event1 = new DateTime(2011, 10, 11);
DateTime event2 = new DateTime(2021, 10, 11);
Action<DateTime> eventPointer; // A Pointer?
if (true)
{
eventPointer = x => { event1 = x; };
}
else
{
eventPointer = x => { event2 = x; };
}
eventPointer(new DateTime(2016, 10, 11));
Console.WriteLine(event1.ToString(CultureInfo.InvariantCulture));
Console.WriteLine(event2.ToString(CultureInfo.InvariantCulture));
DateTime event1=新的DateTime(2011,10,11);
DateTime event2=新的日期时间(2021,10,11);
操作eventPointer;//指针?
如果(真)
{
eventPointer=x=>{event1=x;};
}
其他的
{
eventPointer=x=>{event2=x;};
}
eventPointer(新日期时间(2016年10月11日));
Console.WriteLine(event1.ToString(CultureInfo.InvariantCulture));
Console.WriteLine(event2.ToString(CultureInfo.InvariantCulture));
结果:
10/11/2016 00:00:00
10/11/2021 00:00:00
10/11/2016 00:00:00
10/11/2021 00:00:00
我认为最好是找到另一种解决问题的方法。您可以将
EventPointer
的类型、Event1
和Event2
类型从DateTime
类型替换为DateTime?
。它使EventPointer的类型可以为null引用类型
DateTime? Event1 = DateTime.Now;
DateTime? Event2 = DateTime.Now.AddYears(10);
DateTime? EventPointer;
if (condition)
{
EventPointer = Event1;
}
else
{
EventPointer = Event2;
}
EventPointer.Value //.DoSomething
这就是我要找的。不知何故,我认为DateTime是一个类,而不是一个结构。