【问题标题】:Using concatenation with strings and partial object names in C#在 C# 中使用字符串和部分对象名称的连接
【发布时间】:2023-04-07 07:07:01
【问题描述】:

我正在寻找一种通过对象设置的 ID 获取对象名称的方法。
名称的第一部分始终相同,例如。 “评级”,然后我想将它与计数整数的当前值连接起来,例如。 "Rating" + i.
是否有任何方法可以连接部分对象名称和变量以构造对象名称,或者它只是遍历数组的一种情况?

【问题讨论】:

  • 您需要提供上下文/示例,因为我认为它不清楚您拥有什么以及您想要获得什么。
  • 您可以使用 Linq,但在底线,它无论如何都会遍历列表/数组的成员。

标签: c# object for-loop objectname


【解决方案1】:

假设对象的名字是类名,你可以这样做:

var typeName = this.GetType().Name;

for (int i = 0; i < 5; i++)
{
    Debug.WriteLine(String.Format("{0}{1}", typeName, i));
}

当然,您需要更改代码以满足您的需要,但是对于名为 Test 的类,它会将其打印到调试输出窗口

Test0
Test1
Test2
Test3
Test4

【讨论】:

  • 这似乎是正确的方法,但它可以与&lt;objectname&gt;.Text&lt;objectname&gt;.Value @Joeb454 一起实现
  • 你的意思是当你有你的类的实例(例如Rating对象),还是没有可用的对象实例?
  • 有一个可用/创建的实例,例如。 lblCounter1.Text bu 通过 ("lblCounter" + i).Text 访问?
【解决方案2】:

通常,要投影对象集合,您会使用 LINQ,或者更具体地说是 IEnumerable.Select。在这种情况下,您将intint 类型的Id 属性)投影到string,因此一般方法是:

public static IEnumerable<string> GetNamesFromIds(IEnumerable<int> ids)
{
    return ids.Select(i => "Rating" + i);
}

所以,假设这样一个类:

public class Rating 
{
    public int Id { get; set; }
}

你可以简单地使用:

// get the list of ratings from somewhere
var ratings = new List<Rating>(); 

// project each Rating object into an int by selecting the Id property
var ids = ratings.Select(r => r.Id);

// project each int value into a string using the method above
var names = GetNamesFromIds(ids);

或者一般来说,任何IEnumerable&lt;int&gt; 都可以正常工作:

// get ids from a list of ratings
names = GetNamesFromIds(ratings.Select(r => r.Id));

// get ids from an array
names = GetNamesFromIds(new [] { 1, 2, 3, 4, 5});

// get ids from Enumerable.Range
names = GetNamesFromIds(Enumerable.Range(1, 5));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多