C#检查列表的转换<;字符串>;是否可以使用string.Join创建单个字符串?

C#检查列表的转换<;字符串>;是否可以使用string.Join创建单个字符串?,c#,string,list,out-of-memory,type-conversion,C#,String,List,Out Of Memory,Type Conversion,我有一个长度未定义的列表,出于某种目的,我正在将整个列表转换为字符串,因此我想在转换之前检查它是否可能(它是否会抛出内存异常?),以便我可以处理那么多数据并在另一批中继续 样品 int drc = ImportConfiguration.Data.Count; List<string> queries = new List<string>() { }; //iterate over data row to generate query and execute it fo

我有一个长度未定义的
列表
,出于某种目的,我正在将整个
列表
转换为
字符串
,因此我想在转换之前检查它是否可能(它是否会抛出内存异常?),以便我可以处理那么多数据并在另一批中继续

样品

int drc = ImportConfiguration.Data.Count;
List<string> queries = new List<string>() { };

//iterate over data row to generate query and execute it
for (int drn = 0; drn < drc; drn++)//drn stands to Data Row Number
{
    queries.Add(Generate(ImportConfiguration.Data[drn], drn));

//SO HERE I WANT"S TO CHECK FOR SIZE
//IF IT"S NOT POSSIBLE IN  NEXT ITERATION THAN I'LL EXECUTE IT RIGHT NOW
//AND EMPTIED LIST AGAIN FOR NEXT BATCH

    if (drn == drc - 1 || drn % 5000 == 0)
    {
        SqlHelper.ExecuteNonQuery(connection, System.Data.CommandType.Text, String.Join(Environment.NewLine, queries));
        queries = new List<string>() { };
    }
}
int-drc=ImportConfiguration.Data.Count;
列表查询=新列表(){};
//迭代数据行以生成查询并执行它
for(int-drn=0;drn
您可以尝试:

List<string> theList;

try {
    String allString = String.Join(",", theList.ToArray());
} catch (OutOfMemoryException e) {
    // ... handle OutOfMemoryException exception (e)
}
你可以试试:

List<string> theList;

try {
    String allString = String.Join(",", theList.ToArray());
} catch (OutOfMemoryException e) {
    // ... handle OutOfMemoryException exception (e)
}

我不能说这是不可能的,但我认为更好的方法是进行连接并捕获任何异常:

try
{
     var joined = string.Join(",", list);
}
catch(OutOfMemoryException)
{
     // join failed, take action (log, notify user, etc.)
}

注意:如果发生异常,则需要考虑与使用列表和加入不同的方法。

< P>我不能说这是不可能的,但我认为更好的方法是加入和捕获任何异常:

try
{
     var joined = string.Join(",", list);
}
catch(OutOfMemoryException)
{
     // join failed, take action (log, notify user, etc.)
}


注意:如果异常发生了,那么你需要考虑一个不同的方法,而不是使用一个列表并加入.< /p> ,因为你试图向SQL Server实例发送大量的文本,你可以使用它来将字符串写入流中,最小化构造要发送的数据所需的内存量。

由于您试图将大量文本发送到SQL Server实例,因此可以使用在执行时将字符串写入流,最小化构造要发送的数据所需的内存量。

如何转换
列表
?您打算如何处理字符串?将其写入磁盘?是的,您可以,看看这个@diiN\ux:using String.join您的列表中有多少项?因为如果列表可以毫无例外地保存它们,那么字符串也应该可以这样做(除非列表占用大约2GB的空间,否则字符串将如此,并且除非您以64位模式运行,否则应用程序无法在内存中存储这两个大对象)。您如何转换
列表
?您打算如何处理字符串?将其写入磁盘?是的,您可以,看看这个@diiN\ux:using String.join您的列表中有多少项?因为如果列表可以毫无例外地保存它们,那么字符串也应该可以保存它们(除非列表占用大约2GB,因为这样字符串就可以保存,并且除非您以64位模式运行,否则应用程序无法在内存中存储这两个大对象)。我想在转换之前检查是否可以保存>这一切都在后面。。。我认为解决实际问题比失败更好。因为字符串是不可变的,我不能每次都转换。通常我在批处理操作,我需要这个检查,因为其他第三方API需要字符串作为输入。@Patrickhoffman捕获异常将是告诉我们字符串连接不是正确的方法的一步,如果它经常发生而不是“异常”。在这种情况下,整个设计都有问题。我们只能推测那是什么。我想在转换之前检查一下,这是可能的还是不可能的>这都是之后的事。。。我认为解决实际问题比失败更好。因为字符串是不可变的,我不能每次都转换。通常我在批处理操作,我需要这个检查,因为其他第三方API需要字符串作为输入。@Patrickhoffman捕获异常将是告诉我们字符串连接不是正确的方法的一步,如果它经常发生而不是“异常”。在这种情况下,整个设计都有问题。我们只能推测它是什么。因为字符串是不可变的,我不能每次都转换。因为字符串是不可变的,我不能每次都转换。