С блоком, эквивалентным в C#?

Многостраничный pdf-файл может быть извлечен как текст на одном уровне, а не указывать номер страницы в качестве аргумента, используя ниже код

import PyPDF2
import collections
pdf_file = open('samples.pdf', 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
c = collections.Counter(range(number_of_pages))
for i in c:
   page = read_pdf.getPage(i)
   page_content = page.extractText()
   print page_content.encode('utf-8')
66
задан Gulzar Nazim 2 March 2009 в 03:27
поделиться

7 ответов

хм. Я никогда не использовал VB.net ни в какой глубине, таким образом, я делаю предположение здесь, но я думаю, что блок 'использования' мог бы быть близко к тому, что Вы хотите.

использование определяет область действия блока для переменной, посмотрите, что примером ниже

using ( int temp = someFunction(param1) ) {
   temp++;  // this works fine
}

temp++; // this blows up as temp is out of scope here and has been disposed

Вот является статья от Microsoft, которая объясняет немного больше

<час>

РЕДАКТИРОВАНИЕ: да, этот ответ является неправильным - исходное предположение было неправильным. VB's 'С' больше похож на новые инициализаторы объекта C#:

var yourVariable = new yourObject { param1 = 20, param2 = "some string" };
-3
ответ дан mlennox 7 November 2019 в 11:09
поделиться

Хотя C# не имеет никакого прямого эквивалента для общего случая, синтаксиса инициализатора объекта усиления C# 3 для вызовов конструктора:

var foo = new Foo { Property1 = value1, Property2 = value2, etc };

Видят главу 8 C# подробно для получения дополнительной информации - можно загрузить его бесплатно от веб-сайт Manning .

(Правовая оговорка - да, это находится в моих интересах получить книгу в руки большего количества людей. Но эй, это - бесплатная глава, которая дает Вам больше информации о связанной теме...)

55
ответ дан Jaymin 7 November 2019 в 11:09
поделиться

Вы могли использовать шаблон аккумулятора аргумента.

Большая дискуссия об этом здесь:

http://blogs.msdn.com/csharpfaq/archive/2004/03/11/87817.aspx

4
ответ дан BBetances 7 November 2019 в 11:09
поделиться

О 3/4 ниже на страницу в" Используя Объекты " раздел:

VB:

With hero 
  .Name = "SpamMan" 
  .PowerLevel = 3 
End With 

C#:

//No "With" construct
hero.Name = "SpamMan"; 
hero.PowerLevel = 3; 
11
ответ дан Timothy Carter 7 November 2019 в 11:09
поделиться

Нет, нет.

13
ответ дан Guulh 7 November 2019 в 11:09
поделиться

Это - то, что должен сказать Визуальный диспетчер программ C#: , Почему не делает C#, имеют 'с' оператором?

Многие люди, включая разработчиков языка C#, полагают, что 'с' часто удобочитаемостью вреда, и больше проклятия, чем благословение. Это более ясно объявить локальную переменную с понятным именем и использование, что переменная для выполнения нескольких операций на отдельном объекте, чем он должна иметь блок со своего рода неявным контекстом.

22
ответ дан BIBD 7 November 2019 в 11:09
поделиться

As the Visual C# Program Manager linked above says, there are limited situations where the With statement is more efficient, the example he gives when it is being used as a shorthand to repeatedly access a complex expression.

Using an extension method and generics you can create something that is vaguely equivalent to a With statement, by adding something like this:

    public static T With<T>(this T item, Action<T> action)
    {
        action(item);
        return item;
    }

Taking a simple example of how it could be used, using lambda syntax you can then use it to change something like this:

    updateRoleFamily.RoleFamilyDescription = roleFamilyDescription;
    updateRoleFamily.RoleFamilyCode = roleFamilyCode;

To this:

    updateRoleFamily.With(rf =>
          {
              rf.RoleFamilyDescription = roleFamilyDescription;
              rf.RoleFamilyCode = roleFamilyCode;
          });

On an example like this, the only advantage is perhaps a nicer layout, but with a more complex reference and more properties, it could well give you more readable code.

21
ответ дан 24 November 2019 в 14:36
поделиться