【发布时间】:2021-04-30 03:50:45
【问题描述】:
我需要实现这种方法——将两种数据作为一组参数发送到一个单个Type——这样一种类型就可以保存这两个参数。这样我就可以将Type 传递给某种方法进行处理。
第一个数据项是:
-
要显示的列,命名为:
displayed
第二个数据项:
- 该列
displayed的副本(或仅一部分),因为它具有相同的来源,所以只有这些列不会显示...换句话说,要省略的列,所以我将其命名为:omitted
两者都是我命名的列类型 - SelectedColumns
public class SelectedcColoumns
{
public enum renederingMode
{
Displayed,
omitted
}
public class omitted
{
}
public class displayed
{
}
}
因为要显示该 SetOfColumns 的请求是通过选择表名来完成的。所以作为要显示的数据的 Column 类会根据用户的选择而有所不同
public class tableNames
{
public static readonly string tblCustomers = "tblCustomers";
public static readonly string tblProducts = "tblProducts";
}
public class TblColumns
{
public class tblCustomers
{
public const string custID = "custID",
Name = "Name",
Phone = "Phone";
Email = "Email";
}
public class tblProducts
{
public const string PrudctID = "PrudctID ",
PrudctName = "PrudctID",
PrudctCategory = "PrudctCategory";
}
...etc'
}
当用户从任何表中选择一组表列......在这个例子中......选择Customers或Products列(例如SelectedColumns - 是tblCustomers列),我然后需要有另一个列表,这些列表是用户选择从所有可用表列中省略(不显示)的列表。
假设用户选择将 Table Customers 作为表。他选择省略tblCustomers.custID + tblCustomer.Email,因为他只需要显示姓名和电话。
我遇到的问题是在我可以访问这些参数时(表名+要省略的列),我如何将它发送到进程(将其作为一个参数传递)?这就是为什么我创建了一个专门的类,将这个Type 作为发送参数:all columns + omitted Columns 合二为一。
这是我目前卡住的地方;我需要知道如何使用它来构建/构造用户选择的参数。
public class SelectedColoumns
{
public enum renederingMode
{
Displayed,
omitted
}
public class omitted
{
List<string> omitCols_ListStr = new List<string>();
}
public class displayed
{
List<string> dispCols_ListStr = new List<string>();
}
}
在这一部分中,我通过reflection作为数据的提供者检索列列表,通过以下方法:
通过嵌套的class-name 获取任何嵌套类字段,如List<string>,它是父级 - Type。
public static List<string> anyNestedClassFiledsAsListByType<ClassToReturnOneOfitsNested_Fields>(string NetedClassName)
{
var RetNestedClassFildsListValues = typeof(ClassToReturnOneOFitsNested).GetNestedTypes()
.First(t => String.Compare(t.Name, NetedClassName, true) == 0).GetFields(BindingFlags.Public | BindingFlags.Static)
.Where(f => f.FieldType == typeof(string)).Select(f => (string)f.GetValue(null)).ToList();
return RetNestedClassFildsListValues;
}
所以要产生这个我可以使用上面的方法就像那样
var TableColumns_ALL =
anyNestedClassFldsAsListByType<TblColumns>(tableNames.tblCustomers);
我的问题与需要发送 TableColumns_ALL + 选择的列以省略然后由下面的renderSelectedTable() 处理的类有关。
所以它比反射的复杂性更基本,但仍然有些我不知道 popper 的构造方式,SelectedColumns class,所以它将适应和格式化这个将被发送的新数据类型的结构作为参数,方法是这样的。
public void renderSelectedTable(SelectedColoumns CurrentUserSelectedCols)
{
StringBuilder NwTRLoopSB = new StringBuilder();
string curRowStyle= string.Empty,
nwLine = Environment.NewLine + "\t\t\t",
BaseTemplateTD = string.Empty;
NwTRLoopSB.Append(
string.Format(
"<table id='tbl_Settings' cellspacing='0' border='1'><tr id='TR_headers'{0}>{1}",
curRowStyle,
nwLine
)._Dhtml_DoubleQoutes()
);
foreach (var Item in SelectedListStr.Select((Val, counter) => new { Value = Val, Index = counter }))
{
curRowStyle = Lsts.DynamicStyle_Generator(Item.Index);
if(Lsts.ExcludeColumns(Item.Value, OmittedCols))
{
BaseTemplateTD = string.Format("<td>{0}</td>{1}", Item.Value, nwLine)._Dhtml_DoubleQoutes();
NwTRLoopSB.Append(BaseTemplateTD);
}
}///ENd TR cells generator Section
NwTRLoopSB.Append("</tr></table>");
return NwTRLoopSB.ToString();
}
【问题讨论】:
标签: c# class optimization types