Использовать varchar или текст для динамического поля в mysql?

Я создаю таблицу, которая будет получать разные значения в поле, подумайте о таблице журнала, в которой поле «значение» может быть числом, маленькой строкой или большим текст и т. д.
Поэтому мне было интересно, следует ли мне создать это поле «значения» как текст или создать два поля, одно для небольших входов, таких как дата, числа и некоторая строка, а другое - только для входных текстов.

Итак, у меня такой вопрос: Должно ли это поле «значение» быть Varchar вместе с другим «значением2» в виде текста или создать одно поле Text, которое mysql будет правильно управлять этим?

Я боюсь, что создание только одного поля Text может отрицательно сказаться на производительности .

РЕДАКТИРОВАТЬ: число, дата, время и т. Д. Будут преобразованы в строку перед вставкой, это не главное

Спасибо,
Но что означает оставшаяся конструкция? Я потратил 20 минут на поиски, по крайней мере, чтобы найти, как это правильно называется и где я могу найти дополнительную информацию о том, как это читать, но все напрасно. Я полагаю, что это как-то связано с LINQ, и я искал «стрелку LINQ», но не нашел ничего разумного.

Как это (бла, бла, бла) => {return true;} вызывается конструкция, и где я могу найти дополнительную информацию о таких конструкциях?

29
задан Community 23 May 2017 в 12:17
поделиться

4 ответа

1117 Это лямбда-выражение. Это особенный анонимный делегат. По сути, вы определяете метод, а не даете имя. Его параметры находятся слева от =>, а тело метода - справа от =>. В вашем конкретном случае

(se, cert, chain, sslerror) => { return true; };

- это анонимный метод, определенный лямбда-выражением. Этот конкретный метод имеет четыре параметра

object se
X509Certificate cert
X509Chain chain
SslPolicyErrors sslerror

, а тело метода -

return true;

Это как если бы вы сказали

class ServerCertificateValidation {
    public bool OnRemoteCertificateValidation(
        object se,
        X509Certificate cert,
        X509Chain chain,
        SslPolicyErrors sslerror
    ) {
        return true;
    }
}

и затем

var validation = new ServerCertificateValidation();
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
    validation.OnRemoteCertificateValidation;

Как вызывается эта (blah,blah,blah)=>{return true;} конструкция и где я могу найти больше информации о таких конструкциях?

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

Func<int, int, int> adder = (m, n) => m + n;

Здесь я определяю метод, который съедает пару из int и возвращает int. Это int получается путем сложения значений входных параметров. Он может быть вызван как любой другой метод.

int four = adder(2, 2); 

Вот статья на MSDN о лямбда-выражениях и статья об лямбда-операторе . Если вам действительно интересно, название происходит от лямбда-исчисления .

71
ответ дан 28 November 2019 в 00:47
поделиться

Джейсон объясняет это очень хорошо. Вот пример использования события, которое прослушивается с использованием разных методов:

using System;

namespace Events
{
   class Program
    {
        static void Main(string[] args)
        {
            Events e = new Events();
            e.FireEvents();
            Console.ReadLine();
        }
    }

    public class Events
    {
        private event EventHandler<EventArgs> EventTest;

        public Events()
        {
            EventTest += new EventHandler<EventArgs>(function);

            EventTest += delegate
            {
                Console.WriteLine("written by an anonymous method.");
            };

            EventTest += (o, e) =>
            {
                Console.WriteLine("written by a lambda expression");
            };
        }

        private void function(object sender, EventArgs e)
        {
            Console.WriteLine("written by a function.");
        }

        public void FireEvents()
        {
            if (EventTest != null)
                EventTest(this, new EventArgs()); 
        }
    }
}
2
ответ дан 28 November 2019 в 00:47
поделиться

Для полноты (для результатов поиска и т. Д.): В более поздних версиях C # (начиная с 6.0) синтаксис => был расширен с просто лямбда-выражений для делегатов и деревьев выражений, чтобы охватить членов с выражением тела . Это означает, что ряд простых членов, таких как свойства, методы и т. Д., Могут быть реализованы как тела выражений; например:

public int Foo { get { return innerObj.SomeProp; } }
public void Bar() { Write("Thing"); }

можно записать:

public int Foo => innerObj.SomeProp;
public void Bar() => Write("Thing");
4
ответ дан 28 November 2019 в 00:47
поделиться

=> -оператор представляет лямбда-выражение.

Но для тех из вас, кто посещает этот вопрос в настоящее время, другой вариант использования может быть стрелкой в ​​качестве сокращения для получателя собственности. Эта функция появилась в C # 6. Поэтому вместо записи

public string Foo
{
    get
    {
        return this.bar;
    }
}

вы можете использовать следующий фрагмент:

public string Foo 
{
    get => this.bar;
}

или даже короче:

public string Foo => this.bar;
2
ответ дан 28 November 2019 в 00:47
поделиться
Другие вопросы по тегам:

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