如何返回属性的默认值?

时间:2018-11-05 15:09:03

标签: c# .net properties default-value

我有以下Graphql类型的类,包括POCO类:Order.cs

在这里,我想设置每个字段的默认值。例如对于Name,如果没有返回值,我想返回“ No Name”。对于Created,我想默认返回今天的日期。

public class OrderType : ObjectGraphType<Order>
{
    public OrderType(ICustomerService customers)
    {
        Field(o => o.Id);
        Field(o => o.Name);
        Field(o => o.Description);
        Field(o => o.Created);
    }
}

public class Order
{
    public Order(string name, string description, DateTime created, string Id)
    {
        Name = name;
        Description = description;
        Created = created;
        this.Id = Id;
    }

    public string Name { get; set; }

    public string Description { get; set; }

    public DateTime Created { get; private set; }

    public string Id { get; private set; }
}

有人可以帮助我解决此问题吗?

1 个答案:

答案 0 :(得分:6)

如果您使用的是C#6+,则添加了the ability to assign a default value to auto-properties。因此,您可以简单地编写如下内容:

    const uint WM_KEYDOWN = 0x100;
    const uint KEY_ENTER = 13;

    [DllImport("user32.dll")]
    public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    public static extern IntPtr FindWindowByCaption(IntPtr zeroOnly, string lpWindowName);

    [DllImport("user32.dll", CharSet = CharSet.Unicode)]
    static extern short VkKeyScanA(char ch);

    public void SendInput(string input)
    {
        IntPtr windowHandle = FindWindowByCaption(IntPtr.Zero, myProcess.MainWindowTitle);

        foreach(char c in input)
        {
            PostMessage(windowHandle, WM_KEYDOWN, ((IntPtr)VkKeyScanA(c)), IntPtr.Zero);
        }
        PostMessage(windowHandle, WM_KEYDOWN, ((IntPtr)KEY_ENTER), IntPtr.Zero);
    }

这将根据需要将public string Name { get; set; } = "No Name"; public DateTime Created { get; private set; } = DateTime.Today; 属性的默认值设置为Name,并将No Name属性的默认值设置为今天的日期。

相关问题