c# - 如何通过类实例返回引用?
问题描述
我正在尝试构建一个通用的自定义选择器表单。根据类构造函数,它应该返回单个值或值列表。
public partial class DGV_Select_Multiple : Form
{
public bool Answered { get; set; } = false; // Indicates if user picked something
public string Result { get; set; } = ""; // Single picked result
public List<string> Result_List { get; set; } = new List<string>(); // Multiple picked results
public List<string> Default_List { get; set; } = new List<string>(); // Default highlighted values
private bool MultipleSelection { get; set; } = false; // Flag of single/multiple selection allowed
public DGV_Select_Multiple(IEnumerable<string> List, string Default)
{
// Default value is a single string => single selection available only
InitializeComponent();
this.MultipleSelection = false;
this.Default_List = new List<string> { Default };
b_confirm.Click += delegate { ConfirmSelection(); };
b_cancel.Click += delegate { this.Close(); };
}
public DGV_Select_Multiple(IEnumerable<string> List, List<string> Default_List)
{
// Default is a List<string> => multiple selections are available
InitializeComponent();
this.MultipleSelection = true;
this.Default_List = Default_List;
b_confirm.Click += delegate { ConfirmSelection(); };
b_cancel.Click += delegate { this.Close(); };
}
private void ConfirmSelection()
{
this.Answered = true;
if (MultipleSelection)
{
Result_List = new List<string> { "value1", "value2" };
}
else
{
Result = "some single string";
}
}
}
类的返回值我每次都需要使用这样的冗余操作:
bool Answered = false;
string Result = "";
var AskForm = new DGV_Select_Multiple(new List<string> { "v1", "v2" }, "");
AskForm.Show();
if (AskForm.Answered)
{
Result = AskForm.Result;
}
我尝试在类构造函数中使用ref 字符串,但它最终没有改变。有什么办法可以简化上面的构造函数?
string Result = new DGV_Select_Multiple(new List<string> { "v1", "v2" }, "").Result;
或类似的东西。任何帮助表示赞赏
解决方案
将逻辑移动到静态工厂方法中。由于您有两种返回类型,因此您需要两种方法,但它们可以具有相同的名称。
class DGV_Select_Multiple
{
public static List<string> Show(List<string> list, List<string> defaultList)
{
var f = New DGV_Select_Multiple(list, defaultList);
f.Show();
return f.Answered ? f.Result as string : null;
}
public static string Show(List<string> list, string defaultString)
{
var f = New DGV_Select_Multiple(list, defaultString);
f.Show();
return f.Answered ? f.Result as List<string> : null;
}
//Etc....
现在,当您需要使用表单时,您所要做的就是编写:
string result= DGV_Select_Multiple.Show(new List<string> { "v1", "v2" }, "");
或者
List<string> result= DGV_Select_Multiple.Show(new List<string> { "v1", "v2" }, new List<string> { "" });
推荐阅读
- android - 为什么 ContentResolver 看不到其他应用添加的文件?
- python - 如何使用 twilio 在 whatsapp 上发送位置对象?
- c# - 从 SQL Server 读取/查看 Blazor pdf 文件
- html - 我想让我的标题像原来的 olx 网站一样。任何人都可以告诉我如何像原始图片一样拉伸搜索栏?
- excel - 保存条件格式的应用格式
- python - 将具有元组列表的列拆分为单独的列
- python - 如何修复镶木地板文件的python pandas中的时间戳解释
- typescript - 如何用接口声明文字对象?
- python - “user_id”列中的空值违反非空约束 DRF
- pdf - 在 SAPUI5 中打开本地 PDF