我对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);
}
}
注:
请注意,我使用的是
string.IsNullOrEmpty
而不是== ""
。您可能希望使用string.IsNullOrWhiteSpace
来增强需求。如果您没有使用新版本的.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;
}