Можно ли передать 'расширенный' массив функции в C# как в рубине?

Беспокойство по поводу истории браузера и кнопки «Назад» вызовет головную боль и генитальные бородавки. Есть встроенные средства для решения этой проблемы.

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

[vb.net]

Imports System.Web.Security

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles MyBase.Load
    Session.Abandon()
    FormsAuthentication.SignOut()
End Sub

[c #]

using System.Web.Security;

private void Page_Load(object sender, System.EventArgs e)
{
    // Put user code to initialize the page here
    Session.Abandon();
    FormsAuthentication.SignOut();
}

Код взят с этой страницы и действителен, но страница трудна для глаза.

Хороший Вопрос / Ответ относительно поведения кнопки можно найти здесь здесь .

Обновление:

в соответствии с беседой, которую я веду с Мэтью, отключение кэширования на отдельных страницах, которые являются чувствительными или изменчивыми, можно сделать с помощью следующего кода:

Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

Мне любопытно узнать, работает ли он для вас так же, как и для меня.

7
задан Daniel Huckstep 1 November 2009 в 02:02
поделиться

4 ответа

Ваш метод может быть объявлен как принимающий массив параметров с помощью params :

void F(params int[] foo) {
    // Do something with foo.
}

Теперь вы можете передать произвольное число int s в метод, или массив int . Но при объявлении фиксированного метода вы не можете расширять массив на лету, как вы можете в Ruby, потому что параметры обрабатываются по-другому под капотом (я считаю, что это другое в Ruby), и потому что C # не такой динамичный.

Теоретически вы можете использовать отражение для вызова метода для достижения того же эффекта (при вызове отраженного метода всегда принимается массив параметров).

12
ответ дан 6 December 2019 в 08:15
поделиться

Если вы объявляете аргументы своей функции с помощью ключевого слова params , вы можете передать в массиве или произвольное количество отдельных параметров.

Например:

public class Foo
{
    public static void Main()
    {
        int[] x = new int[] {1,2,3};
        Bar(x);
        Bar(10,11,12);
    }

    public static void Bar(params int[] quux)
    {
        foreach(int i in quux)
        {
            System.Console.WriteLine(i);
        }
    }
}

производит

1
2
3
10
11
12
9
ответ дан 6 December 2019 в 08:15
поделиться

Нет, у вас не может быть "автоматическое расширение" массива при передаче в качестве аргумента методу C #. Одним из способов моделирования этого является написание перегрузок методов:

MyMethod(int a, int b) { /* ... */ }

MyMethod(int[] c)
{
   // check array length?
   MyMethod(c[0], c[1]);
}

AnotherMethod()
{
   int[] someArray = new[] {1,2};

   MyMethod(someArray); // valid
   MyMethod(1,2);       // valid
}

Но, как уже упоминалось несколько других, проще (и несколько наоборот) использовать ключевое слово params . В моем (и в вашем) примере всегда получаются отдельные a и b . С params у вас всегда есть массив, с которым нужно иметь дело.

1
ответ дан 6 December 2019 в 08:15
поделиться

Вы можете сделать это:

void MyMethod(params MyType[] args)
{
}


MyMethod(myObject1, myObject2, myObject3);

MyType[] a = { new MyType(),  new MyType() };
MyMethod(a);
0
ответ дан 6 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

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