возвращаемая строка при использовании построителя Pattern и Method chaining в C# - PullRequest
0 голосов
/ 31 января 2020

Я хочу использовать шаблон Builder и использовать его в цепочке методов.

Это мой класс:

public class SQLGenerator : ISQLGenerator
{
    private readonly SQLGeneratorModel generatorModel;
    public SQLGenerator()
    {
        generatorModel = new SQLGeneratorModel();
    }

    public ISQLGenerator From(string TableName)
    {
        generatorModel.TabelName = string.Format("FROM {0}", TableName);
        return this;
    }

    public ISQLGenerator Select(List<string> SelectItems)
    {
        StringBuilder select = new StringBuilder();
        var lastItem = SelectItems.Last();
        foreach (var item in SelectItems)
        {
            if (!item.Equals(lastItem))
            {
                select.Append(item).Append(" , ");
            }
            else
            {
                select.Append(item);
            }
        }
        generatorModel.Select =string.Format("SELECT {0}", select.ToString());
        return this;
    }

Вот как этот класс используется:

SQLGenerator generator = new SQLGenerator();
List<string> select = new List<string>();
select.Add("id");
select.Add("Name");
var str = generator.Select(select).From("AppUsers");
Console.WriteLine(str);

Теперь я ожидаю, что строка будет возвращена следующим образом: SELECT ID , NAME FROM APPUSER, но в консоли он показывает мне этот результат:

SqlPagingGenerator.Pattern.SQLGenerator

Как показать результат строки

1 Ответ

0 голосов
/ 31 января 2020

Причина вашей ошибки в том, что вы возвращаете объект из метода, а не строку. Все, что вам нужно сделать, это переопределить метод ToString вашего класса, чтобы вернуть нужную вам строку.

    public class SQLGenerator : ISQLGenerator
    {
        ....
        public override string ToString()
        {
           return  $"{generatorModel.TableName} {generatorModel.Select}";
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...