我正在尝试将类对象的List传递给另一个类,在这种情况下,我要初始化一个表单类并需要发送两个值:
类对象:
public class catData
{
public string catName;
public string modGUID;
public string versionLocal;
public string versionServer;
public bool onServer;
}
在Class1中,我有列表,需要在初始化时发送给Class2。
的Class1:
String catExportTXT = "txt";
List<catData> mainCatSet = new List<catData>();
using (var catForm = new Class2(catExportTXT, mainCatSet))
{
var result = catForm.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
localvar = catForm.selectedCats;
}
else
{
Environment.Exit(0);
}
}
这里的问题是Class2没有类Object(catData)的定义所以我不能直接将它作为参数发送。
有人可以建议我如何在Class2中定义类对象,以便我可以发送值吗?
非常感谢
答案 0 :(得分:0)
我不确定你为什么需要这样做但是一个选项是使用一系列动态。
class Program
{
static void Main(string[] args)
{
var c1 = new Class1();
c1.SendCats();
}
}
class Class1
{
public void SendCats()
{
var catData = new[]
{
new { name = "cat1", version = 1 },
new { name = "cat2", version = 2 }
};
var c2 = new Class2(catData);
}
}
class Class2
{
public Class2(dynamic[] catData)
{
foreach (var cat in catData)
{
Console.WriteLine("{0} {1}", cat.name, cat.version);
}
}
}
输出
cat1 1
cat2 2
此外,如果需要,您可以将Cat对象列表转换为动态数组
var catList = new List<Cat>();
catList.Add(new Cat { Name = "cat1", Version = 1 });
catList.Add(new Cat { Name = "cat2", Version = 2 });
var catData = catList.Select(c => new { name = c.Name, version = c.Version }).ToArray();
var c2 = new Class2(catData);
答案 1 :(得分:0)
好的,这个怎么样:
1)创建一个界面以提供可显示的名称。
/// <summary>
/// Provides an interface used to allow selection of an object in the user interface.
/// </summary>
public interface ISelectable : IDisplayName
{
}
2)为可选对象创建一个界面。
public class catData : ISelectable
{
public string catName;
public string modGUID;
public string versionLocal;
public string versionServer;
public bool onServer;
/// <summary>
/// Gets a name to display in the application to end-users.
/// </summary>
public string DisplayName { get { return catName; } }
public override string ToString()
{
return this.DisplayName;
}
}
3)分配接口并在catData对象上创建属性。
public partial class Class2<T> : Form where T : ISelectable
{
private IEnumerable<ISelectable> selectableItems;
public Class2()
{
InitializeComponent();
}
public Class2(string exportText, IEnumerable<T> list) : this()
{
this.selectableItems = list;
}
public T { get; set; }
public List<T> SelectedItems { get; set; }
private void Class2_Load(object sender, EventArgs e)
{
foreach (ISelectable item in selectableItems)
{
//System.Diagnostics.Debug.Print(item.DisplayName);
System.Diagnostics.Debug.Print(item.ToString());
}
}
}
4)Class2表单(有一个示例,但显然缺少核心选择操作)。如果您使用通用列表控件,请考虑在catData中覆盖ToString(),如上所述。
String catExportTXT = "txt";
List<catData> mainCatSet = new List<catData>();
using (var selectForm = new Class2<catData>(catExportTXT, mainCatSet))
{
var result = selectForm.ShowDialog();
if (result == System.Windows.Forms.DialogResult.OK)
{
var localvar = selectForm.SelectedItem;
}
else
{
Environment.Exit(0);
}
}
5)在您的主应用程序中使用如下:
{{1}}
希望这有道理吗?