在C#中,我发现索引属性非常有用.例如:
var myObj = new MyClass();
myObj[42] = "hello";
Console.WriteLine(myObj[42]);
Run Code Online (Sandbox Code Playgroud)
但据我所知,没有语法糖支持自己支持索引的字段(如果我错了请纠正我).例如:
var myObj = new MyClass();
myObj.field[42] = "hello";
Console.WriteLine(myObj.field[42]);
Run Code Online (Sandbox Code Playgroud)
我需要这样做的原因是,我已经用我的分类的索引属性,但我 GetNumX(),GetX()和SetX()功能如下:
public int NumTargetSlots {
get { return _Maker.NumRefs; }
}
public ReferenceTarget GetTarget(int n) {
return ReferenceTarget.Create(_Maker.GetReference(n));
}
public void SetTarget(int n, ReferenceTarget rt) {
_Maker.ReplaceReference(n, rt._Target, true);
}
Run Code Online (Sandbox Code Playgroud)
你可能会看到将这些暴露为一个可索引的字段属性会更有意义.我可以编写一个自定义类来实现这一点,每次我想要语法糖,但所有的样板代码似乎都没有必要.
所以我编写了一个自定义类来封装样板,并且可以轻松创建可以编制索引的属性.这样我可以添加一个新属性,如下所示:
public IndexedProperty<ReferenceTarget> TargetArray {
get {
return new IndexedProperty<int, ReferenceTarget>(
(int n) => GetTarget(n),
(int n, ReferenceTarget rt) => SetTarget(n, …Run Code Online (Sandbox Code Playgroud) 我IEnumerable<T>什么时候可以使用...我说List<T>什么?前者优于后者有什么优势?
我正在编写一个简单的C#类来处理特定竞赛中的SQL查询.大多数查询将是SELECT3-4个参数的语句,应该正确转义,所以函数将是这样的
public DataTable Select(string query, string[] parameters) {
# some code
}
Run Code Online (Sandbox Code Playgroud)
应该parameters是一个Array还是一个List<>?在这两种类型作为功能参数进行选择时是否有一些最佳实践,还是只是偏好问题?
PS我通常更喜欢List<>因为灵活性,但在这里创造一个动态的可能性Array是一个好点.
我需要创建2D锯齿状数组.想想一个矩阵.行数是已知的,列数是未知的.例如,我需要创建10个元素的数组,其中每个元素的类型为string [].我为什么需要那个?列数是未知的 - 此函数必须简单地执行分配并将数组传递给其他函数.
string[][] CreateMatrix(int numRows)
{
// this function must create string[][] where numRows is the first dimension.
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
我有C++背景.在C++中,我会编写以下内容(从不修改语法)
double ** CreateArray()
{
double **pArray = new *double[10]() // create 10 rows first
}
Run Code Online (Sandbox Code Playgroud)
更新2
我正在考虑使用List,但我需要对行和列进行索引访问.
c# ×4
arrays ×3
.net ×2
list ×2
collections ×1
function ×1
ienumerable ×1
parameters ×1
properties ×1