如:
private string Test()
{string houseInfo = String.Empty;       //是定义到这里好
for (int i=0;i<dt.Rows.Count;i++)
{
     string houseInfo = dt.Rows[i]["HOUSE_NAME"].ToString();  //还是定义到这里好
     //之后在循环体中多次用到这个变量做各种操作
}
return 
}

解决方案 »

  1.   

    string   houseInfo   =   dt.Rows[i][ "HOUSE_NAME "].ToString();你如果定义到for循环里返回的是最后一条记录  因为最后一条数据覆盖原有的数据。。你两种写法最终都满足不了你的要求 不过一般还是写到外面 不用经常创建想实现什么功能?
      

  2.   

    定义在for内部,作用域只在for内部使用
      

  3.   

    private   string   Test() 
    { string   houseInfo   =   String.Empty;               //定义到这里好 
    for   (int   i=0;i <dt.Rows.Count;i++) 

              string   houseInfo   =   dt.Rows[i][ "HOUSE_NAME "].ToString();             } 
    return   
    }
      

  4.   

    我的意思就是要问如果定义在循环体外,就只声明一次,生命在循环体外,就要每次循环就要声明一次,那种好呢如: 
    private   string   Test() 

    StringBuilder sb = new StringBuilder();
    string   houseInfo   =   String.Empty;               //是定义到这里好 
    for   (int   i=0;i <dt.Rows.Count;i++) 

              string   houseInfo   =   dt.Rows[i][ "HOUSE_NAME "].ToString();     //还是定义到这里好 
              //之后在循环体中多次用到这个变量做各种操作 
             sb.Append().Append(houseInfo.SubString());

    return   sb.ToString();
    }
      

  5.   

    如果这样,不需要定义sb.Append().Append(dt.Rows[i][ "HOUSE_NAME "].ToString());
      

  6.   

    经测试 两者相同using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace stringInloop
    {
        class Program
        {
            private static Random random = new Random();        static void Main(string[] args)
            {
                string a = string.Empty;
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 10; i++)
                {
                    a = random.Next().ToString();
                    sb.Append(a);
                }            Console.WriteLine(sb.ToString());
            }
        }
    }using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace stringInloop2
    {
        class Program
        {
            private static Random random = new Random();        static void Main(string[] args)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 10; i++)
                {
                    string a = random.Next().ToString();
                    sb.Append(a);
                }            Console.WriteLine(sb.ToString());
            }
        }
    }
    IL1文件
    .method private hidebysig static void  Main(string[] args) cil managed
    {
      .entrypoint
      // Code size       64 (0x40)
      .maxstack  2
      .locals init ([0] string a,
               [1] class [mscorlib]System.Text.StringBuilder sb,
               [2] int32 i,
               [3] int32 CS$0$0000)
      IL_0000:  ldstr      ""
      IL_0005:  stloc.0
      IL_0006:  newobj     instance void [mscorlib]System.Text.StringBuilder::.ctor()
      IL_000b:  stloc.1
      IL_000c:  ldc.i4.0
      IL_000d:  stloc.2
      IL_000e:  br.s       IL_002f
      IL_0010:  ldsfld     class [mscorlib]System.Random stringInloop.Program::random
      IL_0015:  callvirt   instance int32 [mscorlib]System.Random::Next()
      IL_001a:  stloc.3
      IL_001b:  ldloca.s   CS$0$0000
      IL_001d:  call       instance string [mscorlib]System.Int32::ToString()
      IL_0022:  stloc.0
      IL_0023:  ldloc.1
      IL_0024:  ldloc.0
      IL_0025:  callvirt   instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)
      IL_002a:  pop
      IL_002b:  ldloc.2
      IL_002c:  ldc.i4.1
      IL_002d:  add
      IL_002e:  stloc.2
      IL_002f:  ldloc.2
      IL_0030:  ldc.i4.s   10
      IL_0032:  blt.s      IL_0010
      IL_0034:  ldloc.1
      IL_0035:  callvirt   instance string [mscorlib]System.Object::ToString()
      IL_003a:  call       void [mscorlib]System.Console::WriteLine(string)
      IL_003f:  ret
    } // end of method Program::MainIL2文件.method private hidebysig static void  Main(string[] args) cil managed
    {
      .entrypoint
      // Code size       58 (0x3a)
      .maxstack  2
      .locals init ([0] class [mscorlib]System.Text.StringBuilder sb,
               [1] int32 i,
               [2] string a,
               [3] int32 CS$0$0000)
      IL_0000:  newobj     instance void [mscorlib]System.Text.StringBuilder::.ctor()
      IL_0005:  stloc.0
      IL_0006:  ldc.i4.0
      IL_0007:  stloc.1
      IL_0008:  br.s       IL_0029
      IL_000a:  ldsfld     class [mscorlib]System.Random stringInloop2.Program::random
      IL_000f:  callvirt   instance int32 [mscorlib]System.Random::Next()
      IL_0014:  stloc.3
      IL_0015:  ldloca.s   CS$0$0000
      IL_0017:  call       instance string [mscorlib]System.Int32::ToString()
      IL_001c:  stloc.2
      IL_001d:  ldloc.0
      IL_001e:  ldloc.2
      IL_001f:  callvirt   instance class [mscorlib]System.Text.StringBuilder [mscorlib]System.Text.StringBuilder::Append(string)
      IL_0024:  pop
      IL_0025:  ldloc.1
      IL_0026:  ldc.i4.1
      IL_0027:  add
      IL_0028:  stloc.1
      IL_0029:  ldloc.1
      IL_002a:  ldc.i4.s   10
      IL_002c:  blt.s      IL_000a
      IL_002e:  ldloc.0
      IL_002f:  callvirt   instance string [mscorlib]System.Object::ToString()
      IL_0034:  call       void [mscorlib]System.Console::WriteLine(string)
      IL_0039:  ret
    } // end of method Program::Main
    是编译器在编译的时候 将a处理掉了。这样的话 写在外面相对来说比较慢。不如直接
    sb.Append().Append(dt.Rows[i][ "HOUSE_NAME "].ToString());像如梦那样。