C# 如何在代码中模拟单选按钮式功能
我遇到了一个有趣的问题,到目前为止,我还没有找到一个令人信服的好答案 假设我在表单上有一个单选按钮,有三个选项:C# 如何在代码中模拟单选按钮式功能,c#,C#,我遇到了一个有趣的问题,到目前为止,我还没有找到一个令人信服的好答案 假设我在表单上有一个单选按钮,有三个选项: 出生日期 兄弟姐妹人数 名字 当您将它们实现为单选按钮时,您只能指定三个按钮中的一个 现在想象一下,我实际上也希望指定该值。所以我的表格是这样的: class Program { static void Main(string[] args) { var param = new Container<int>(){ Name = "Age
- 出生日期
- 兄弟姐妹人数
- 名字
class Program
{
static void Main(string[] args)
{
var param = new Container<int>(){ Name = "Age", Value = 60};
Test(param);
}
public static void Test<TType>(Container<TType> container)
{
Console.Write(string.Format("{0} = {1}", container.Name, container.Value));
Console.ReadLine();
}
}
public class Container<TType>
{
public string Name { get; set; }
public TType Value { get; set; }
}
- 出生日期:年月日
- 兄弟姐妹数:nn
- 姓名:xyz
这似乎是一个Jon Skeet类型的问题,哈哈,我可能需要复习“C#Depth”来解决这个问题。但我想我现在应该把它贴在StackOverFlow上 这里有点大声思考,所以可能没有什么意义 我会有一个名为
PersonalityTrait
的enum
enum PersonalityTrait
{
DateOfBirth,
NumberOfSiblings,
Name
}
您可以有一个泛型PersonalityTraitValue
类
public class PersonalityTraitValue<T>
{
public T Value { get; set; }
public PersonalityTrait Trait { get; set; }
}
公共类PersonalityTraitValue
{
公共T值{get;set;}
公共PersonalityTrait Trait{get;set;}
}
您可以有一个PersonalityTraitManager
或PersonalityTraitFactory
类,该类接受enum
并返回/设置PersonalityTraitValue
实例
正如我所说,这可能不是最伟大的想法,但它是第一个出现在我脑海中的想法。可能类似于:
class DataHolder<T>
{
private T datacontainer;
public DataHolder(T input)
{
datacontainer = input;
}
public DataHolder() {}
public T Data
{
get { return datacontainer; }
set { datacontainer = value; }
}
}
类数据持有者
{
私有T数据容器;
公共数据持有者(T输入)
{
数据容器=输入;
}
公共数据持有者(){}
公共T数据
{
获取{return datacontainer;}
设置{datacontainer=value;}
}
}
也许:
class MyDataHolder {
int numberOfSiblings = -1;
public property int NumberOfSiblings {
get {
ClearData();
numberOfSiblings = value;
}
}
DateTime dateOfBirth = null;
public property DateTime DateOfBirth {
get {
ClearData();
dateOfBirth = value;
}
}
String name = null;
public property String Name {
get {
ClearData();
name = value;
}
}
private void ClearData() {
numberOfSiblings = -1;
dateOfBirth = null;
name = null;
}
public object GetData() {
if (numberOfSiblings != -1) {
return numberOfSiblings;
}
else if (dateOfBirth != null) {
return dateOfBirth;
}
else if (name != null) {
return name;
}
return null;
}
}
这个问题缺少的是需要将容器作为参数传递给方法(我知道海报,并与他讨论过这一点) 我喜欢泛型的概念。我是这样想的:
class Program
{
static void Main(string[] args)
{
var param = new Container<int>(){ Name = "Age", Value = 60};
Test(param);
}
public static void Test<TType>(Container<TType> container)
{
Console.Write(string.Format("{0} = {1}", container.Name, container.Value));
Console.ReadLine();
}
}
public class Container<TType>
{
public string Name { get; set; }
public TType Value { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
var param=newcontainer(){Name=“Age”,Value=60};
试验(参数);
}
公共静态空隙试验(容器)
{
Write(string.Format(“{0}={1}”,container.Name,container.Value));
Console.ReadLine();
}
}
公营货柜
{
公共字符串名称{get;set;}
公共TType值{get;set;}
}
我不喜欢神奇的字符串,特别是因为它最终将成为一个通过web服务公开的公共API。顺便说一句,请不要在标题中包含“C”—您已经在标记中找到了它。这听起来像是泛型的完美用法。两个已经发布的答案似乎都在正确的轨道上。拥有3个单独的属性是一种糟糕的设计,最终会导致代码过于复杂,出现错误的机会也更多。是的,需要将容器作为参数传递给方法肯定是问题的一部分。