gpt4 book ai didi

c# - 结构的默认参数

转载 作者:可可西里 更新时间:2023-11-01 08:04:17 25 4
gpt4 key购买 nike

我有一个这样定义的函数:

public static void ShowAbout(Point location, bool stripSystemAssemblies = false, bool reflectionOnly = false)

这会标记 CA1026“用提供所有默认参数的重载替换方法‘ShowAbout’”。我不能执行 Point location = new Point(0, 0)Point location = Point.Empty 因为它们都不是编译时常量,因此不能作为默认值那个函数参数。所以问题是,如何为结构指定默认参数值?如果做不到,我可能会根据这里有人给出的任何理由在源代码中抑制 CA1026。

最佳答案

你可以这样做:

public static void ShowAbout(Point location = new Point(), 
bool stripSystemAssemblies = false,
bool reflectionOnly = false)

来自 C# 4 规范,第 10.6.1 节:

The expression in a default-argument must be one of the following:

  • a constant-expression
  • an expression of the form new S() where S is a value type
  • an expression of the form default(S) where S is a value type

所以你也可以使用:

public static void ShowAbout(Point location = default(Point),
bool stripSystemAssemblies = false,
bool reflectionOnly = false)

编辑:如果您想默认为点 (0, 0) 以外的值,则值得了解另一个技巧:

public static void ShowAbout(Point? location = null
bool stripSystemAssemblies = false,
bool reflectionOnly = false)
{
// Default to point (1, 1) instead.
Point realLocation = location ?? new Point(1, 1);
...
}

这也会让调用者通过传入 null 明确地说“你选择默认值”。

关于c# - 结构的默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2676128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com