C# 带“的去浮代码”;使用;

C# 带“的去浮代码”;使用;,c#,coding-efficiency,C#,Coding Efficiency,我正在尝试尽可能地缩短和完善我的代码。我的一个想法是从一行代码中返回一个字符串,使用using,以确保在事务完成时访问的文件再次可用。我的目标是尽可能接近一行代码,但是我很难找到解决字符串不变性的方法 以下代码无效: string sample() { try{ using( string example = (new StreamReader (new FileStream

我正在尝试尽可能地缩短和完善我的代码。我的一个想法是从一行代码中返回一个字符串,使用
using
,以确保在事务完成时访问的文件再次可用。我的目标是尽可能接近一行代码,但是我很难找到解决字符串不变性的方法

以下代码无效:

string sample()
{
    try{ using( string example = (new StreamReader
                                 (new FileStream
                                 ("", FileMode.Open, FileAccess.Read),
                                 Encoding.UTF8).ReadToEnd())) }
    //I haven't quite worked out returning the value yet, but this is irrelevant here
}
工作守则如下:

string sample()
{
    FileStream fs = new FileStream("", FileMode.Open, FileAccess.Read);
    try{
        using(StreamReader rdr = new StreamReader(fs);
        return rdr.ReadToEnd();
       }
}
我可以通过执行以下操作轻松简化此过程:

string sample()
    {
        try
        {
            return (new StreamReader(new FileStream
                                    ("", FileMode.Open, FileAccess.Read),
                                    Encoding.UTF8).ReadToEnd());
        }
    }

但是,这可能不会在交易完成后关闭文件(如果这是错误的,请让我知道)。这里有没有一种方法可以解决字符串的不变性问题,或者我正在寻找一种不可能的方法?

看起来您需要一种方法来使用语句从
创建表达式。您可以创建一个函数:

public static T Use<TRec, T>(TRec resource, Func<TRec, T> f) where TRec : IDisposable
{
    using(resource) { return f(resource); }
}

为什么如此需要一艘班轮?您正在失去可编辑性和易理解性这段代码试图做什么?它并没有消除浮肿或简化任何事情,而是更难阅读。
try
块似乎也不起作用。为什么不使用单个
文件或
文件。ReadText
?这段代码实际上是在做
File.ReadText
doesHow所做的:
string content=System.IO.File.ReadAllText(filename,Encoding.UTF8)?@Rahul我正在试验C#的工作方式,而不仅仅是为了实际使用而创造一些东西。我认为真正理解我在未来所做的事情是一种很好的做法。@ScarySpice在试图“简化事情”之前,你可能应该先了解C#是如何工作的。特别是如果您打算使用
catch{}
来隐藏错误而不是处理错误,这就是编写错误的方式。也不需要
FileStream
,它接受path@PanagiotisKanavos-在本例中是的,但看起来这个问题是关于
使用
而不是阅读文本。这个问题是关于理解C#语法和简化代码。这个
Use
方法并不比使用(var s=new StreamReader(new FileStream(“,FileMode.Open,FileAccess.Read),Encoding.UTF8)返回s.ReadToEnd())编写
短或简单;
string s = Use(new StreamReader(new FileStream("", FileMode.Open, FileAccess.Read), Encoding.UTF8), sr => sr.ReadToEnd());