Почему с () конструкция, не включенная в C#, когда это действительно прохладно в VB.NET?

У меня была такая же проблема, как и у вас, в конце я просто сохранил входные данные в виде файла .RData, который я загрузил до всего остального в коде Сервера.

# load packages
library(shiny)

load("loaddata.RData")

server <- function(input, output) {
....
10
задан Shog9 4 March 2010 в 20:09
поделиться

6 ответов

Я не был бы удивлен, добавляется ли "С" или подобная функция к C# в конечном счете наряду с другой прежде популярный исключительно функции VB. Был большой разговор в презентациях C# 4.0 предварительного просмотра недавно в PDC и в другом месте увеличенного "внимания на четность языка", запускающуюся с C# 4.0 и VB 10.

0
ответ дан 3 December 2019 в 18:02
поделиться

Лично мне не нравится С ТЕМ, когда это используется после конструкции - если необходимо сделать несколько вещей с объектом после того, как это инициализируется, обычно то поведение должно инкапсулироваться в самом типе. Если Вы действительно хотите сделать что-то как С, это - только вопрос объявления короткой переменной и дополнительно представления нового объема.

Однако полезно смочь сжато инициализировать объект с несколькими свойствами - который является точно, почему C# 3 позволяет Вам писать:

MyObject x = new MyObject { Name="Fred", Age=20, Salary=15000 };

Существуют ограничения к этому (который дополнительные и именованные параметры в C# 4 помогут преодолеть), но это лучше, чем это было, не ведя к потенциальной путанице/неоднозначностям.

(На передней стороне литерала XML я снова с командой C# - XML является очень определенной технологией для помещения в язык. Если они могли бы придумать обобщенную форму, которая, оказалось, создала XML, но могла использоваться для создания других деревьев также, которые будут хороши - так же, как выражения запроса непосредственно не связываются с IEnumerable или IQueryable.)

16
ответ дан 3 December 2019 в 18:02
поделиться

Можно заменить VB.Net's With путем создания быстрого однобуквенного имени переменной. Это - на самом деле меньше кода с тех пор With также требует End With позже.

Например, одна вещь, которую я раньше делал справедливо часто, была, выполняют итерации по строкам в таблице данных для отчета о стиле управления/повреждения.

В vb.net, который мог бы быть похожим на это:

Dim CurCustomerName As String 
Dim CustomerSalesTotal As Decimal

Dim ds As DataSet = GetReportData()
With ds.Tables(0).Rows
   Dim i As Integer = 0
   While i < .Count
       ''//{
       CurCustomerName = .Item(i)("CustName")
       CustomerSalesTotal = 0
       PrintHeaderLine(CurCustomerName)

       While i < .Count AndAlso CurCustomerName = .Item(i)("CustName")
            ''//{
            PrintItemLine(.Item(i)("OrderTotal"))
            CustomerSalesTotal += .Item(i)("OrderTotal")

            i+= 1
       End While ''//}
       PrintSubTotalLine(CustomerSalesTotal)
   End While ''//}
End With

C# был бы похож на это:

string CurCustomerName;
Decimal CustomerSalesTotal;

DataSet ds = GetReportData();
DataRowCollection r = ds.Tables[0].Rows;
int i=0;
while (i<r.Count)
{
    CurCustomerName = r[i]["CustName"];
    CustomerSalesTotal = 0;
    PrintHeaderLine(CurCustomerName);

    while (i<r.Count && CurCustomerName == r[i]["CustName"])
    {
        PrintItemLine(r[i]["OrderTotal"]);
        CustomerSalesTotal += r[i]["OrderTotal"];

        i++;
    }
    PrintSubTotalLine(CustomerSalesTotal);
}

Вещь заметить вот состоит в том, что для версии C# на самом деле было нужно меньше ввода, потому что VB не мог объединиться WITH с индексом массива, и должен был пройти .Item свойство для определенных вещей. Это не имеет большого значения здесь, но воображают, имел ли отчет 20 полей вместо 2 и должен был повредиться на 3 объектах вместо 1.

Конечно, Вы могли использовать технику, продемонстрированную в C# для VB также. Но главное отметить является этим WITH действительно не дает Вам очень.

3
ответ дан 3 December 2019 в 18:02
поделиться

Это о предпочтениях разработчика, но я с Вами о С. Мое предпочтение состоит в том, чтобы минимизировать количество переменных в игре и объем, в котором они живут. Философия C#, кажется, является почти такой же. Но в этом случае ответы здесь, кажется, предполагают, что, добавляя (и делая себя ответственными за) переменная является Хорошей Вещью по сравнению с конструкцией, которая, мне, очень похожа на лямбды.

1
ответ дан 3 December 2019 в 18:02
поделиться

Я чувствую, что довольно не имеет смысла только позволить 'массовую' установку свойства во время инициализации. Я действительно не добираюсь, почему это было бы 'плохо':

MyObj myObj = ObjFactoryFunction();

...

if(someCondition)
  myObj { Prop1 = 1, Prop2 = 2 };

Я чувствую, что этот пример кода является чистым и кратким.

1
ответ дан 3 December 2019 в 18:02
поделиться

Обычно, когда я вижу запрос на a with функция в C#, я вижу код, который извлек бы выгоду из рефакторинга. Обычно, когда рефакторинг сделан, воображаемая потребность в with не стал.

Мне нравится способ, которым разрабатывает мой код, когда я создаю быстрый интерфейс в к объекту; это имеет некоторые общие черты with. Если я разрабатывал MessageBox.Show(), Я мог бы записать:

new MessageBox()
    .SetText("Hello World!")
    .SetButtons(MessageBox.Buttons.OK)
    .SetIcon(MessageBox.Icon.Information)
    .Show();

Можно также видеть что-то похожее с Linq:

var q = Enumerable.Range(1, 100)
            .Where(x => x % 2 == 0)
            .Select(x => x * x);

Это чувствует немного как with но, кажется, подходит естественно к на язык, который я уже имею.

1
ответ дан 3 December 2019 в 18:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: