2017-07-16 167 views
3

如何在不更改set属性的情况下自定义get属性?如何自定义Get属性?

public DateTime lastprocessed { get; set; } 

我想返回本地时间戳中的日期时间,因为它存储在UTC中。

+3

在这种情况下,您不能使用自动实现的属性。恢复到正常的语法。 –

+1

就像@Aominè说的那样。但是,你可以做的是使'get'受保护,并创建一个方法(例如'GetLastProcessed()')并返回本地**日期**。这将帮助您避免直接访问属性值,迫使您使用该方法。 – Alisson

+0

除了下面列出的方法之外,您可以添加一个新属性“LastProcessedUTC”并进行“lastprocessed”。在返回值时,您确实要小心了解'DateTime.Kind'的值。 一般来说,当我需要应用处理时,我倾向于避免自动属性。它们不适合所有用例。 – PSGuy

回答

2

,你可以得到的最接近的是,在C# 6后来,你同样可以初始化自动实现的属性字段:如果您想转让之前进行一些逻辑,那么你可以创建一个

public DateTime FirstName { get; set; } = // your value here; 

方法做逻辑,然后将结果像这样:

public DateTime FirstName { get; set; } = doLogic(); 

最后一个选项也只是经典get;

public DateTime lastprocessed 
{ 
     get 
     { 
      // some logic ... 
      return // some value; 
     } 

     set 
     { 
      // some logic ... 
     } 
} 
0

我觉得你最好的选择将是为使用什么@Alisson在评论建议(protected get用的方法来访问它的值)或private支持者:

private DateTime _lastprocessed; 
    public DateTime lastprocessed 
    { 
     get 
     { 
      return _lastprocessed.ToLocalTime().ToUniversalTime(); 
     } 
     set 
     { 
      _lastprocessed = value; 
     } 
    } 

当你申请的格式到没有后台字段的get访问器,并尝试创建set访问器,最后会出现堆栈溢出错误,因为set将无休止地自行调用,试图设置该属性的值。

如果将初​​始化程序添加到自动属性中,这对于设置初始值lastprocessed可以,但是我认为如果打算重新指定lastprocessed的值,您最终会遇到麻烦。即使您为初始化程序定义了函数,也无法访问分配给lastprocessed的值。