我不明白为什么我的错误消息不起作用



我对c#相对较新/缺乏经验,我正在尝试编写一个bool方法来验证windows窗体中的用户输入是否为空(返回true或false(,以及如果返回false,则将errorMessage变量更改为具有新文本。

public static bool IsPresent(string value)
{ 
if (value == "")
{
errorMessage = "all textboxes and combo boxes must be filled";
return false;
}
else
{
errorMessage = "";
return true;
}
}

我在errorMessage上得到编译时错误,说

"非静态字段、方法或属性"member"需要对象引用;。

我在文件顶部声明了errorMessage变量,并将其公开。我已经尝试摆脱该方法的静态方面,这确实修复了它,但在代码的其他地方会导致更多错误。你知道我该怎么解决这个问题吗?

您可以声明公共静态字段,当然可以这样做:

static class Helper
{
public static string errorMessage;
public static bool IsPresent(string value)
{
if (value == "")
{
errorMessage = "all textboxes and combo boxes must be filled";
return false;
}
else
{
errorMessage = "";
return true;
}
}
}

但这有一些问题,其中之一是errorMessage现在可以被一些外部类修改,所以它应该改为其他的东西,例如:

private static string errorMessage;
public static string GetMessageCopy()
{
return errorMessage;
}

你可以将其更改为property,它也可以做同样的事情,但更容易阅读:

public static string ErrorMessage { get; private set; } // property should always start with a big letter

现在只有Helper类可以修改ErrorMessage,但每个人都可以阅读它

下一个问题是您的参数的名称";值";是一个C#关键字,用于不同的东西,所以请考虑重命名它。

您需要首先在静态函数中声明变量。如果你已经在方法的范围之外声明了它,我建议删除static关键字,这样它看起来应该是这样的:

string errorMessage;
bool IsPresent(string value)
{
if (value == "")
{
errorMessage = "all textboxes and combo boxes must be filled";
return false;
}
else
{
errorMessage = "all textboxes and combo boxes must be filled";
return true;
}
}

您应该了解static。您可以从static(C#引用(开始。

然而,有些解决方案不需要成员变量(您在我的文件顶部称之为(,可以避免静态/非静态问题。例如,让我们考虑这个解决方案:

(bool IsValid, string? ErrorMessage) IsPresent(string? s)
{
if (string.IsNullOrEmpty(s))
{
return(IsValid: false, ErrorMessage: "All textboxes and combo boxes must be filled");
}
else
{
return(IsValid: true, ErrorMessage: null);
}
}

注:

  1. 请注意,我使用的是string.IsNullOrEmpty而不是== ""。您可能希望使用string.IsNullOrWhiteSpace来增强需求。

  2. 如果您没有使用新版本的.NET.,则可能需要将(bool IsValid, string? ErrorMessage) IsPresent(string? s)更改为(bool IsValid, string ErrorMessage) IsPresent(string s)

如果我们仔细想想,我们会注意到IsValid是多余的。检查错误是否返回足够:

string? CheckValid(string? s)
{
if (string.IsNullOrWhiteSpace(s))
{
return "All textboxes and combo boxes must be filled";
}
//if ( ... some other requirement )
//{
//     return "Some error";
//}
return null;
}

相关内容

  • 没有找到相关文章

最新更新