GVKun编程网logo

delphi – 如何为TEncoding类型的函数参数设置默认值?(delphi setlength函数 引用哪个单元)

14

本文的目的是介绍delphi–如何为TEncoding类型的函数参数设置默认值?的详细情况,特别关注delphisetlength函数引用哪个单元的相关信息。我们将通过专业的研究、有关数据的分析等多种

本文的目的是介绍delphi – 如何为TEncoding类型的函数参数设置默认值?的详细情况,特别关注delphi setlength函数 引用哪个单元的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解delphi – 如何为TEncoding类型的函数参数设置默认值?的机会,同时也不会遗漏关于android – 如何在Sqlite中为TEXT列设置默认值?、c – 如何初始化具有默认值的类的函数参数、c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?、c# – 如何为函数设置条件参数参数的知识。

本文目录一览:

delphi – 如何为TEncoding类型的函数参数设置默认值?(delphi setlength函数 引用哪个单元)

delphi – 如何为TEncoding类型的函数参数设置默认值?(delphi setlength函数 引用哪个单元)

从D2007转换为XE2,我转换了这个功能
function Add_Line( FileStream : TFileStream; ALine : string) : boolean;

function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
  AStr: ANSISTring;
begin
  Result := True;
  if Enc = nil then Enc := TEncoding.ANSI;
  try
//Old    FileStream.WriteBuffer( Pointer(ALine)^,Length(ALine) );
    if Enc = TEncoding.UTF8 then
      AStr := UTF8Encode(ALine)
    else
      AStr := ANSIString(ALine);
    FileStream.WriteBuffer( AStr[1],Length(ALine) );
    end;
  except
    Result := False;
  end;
end;

理由:

>尽可能少地使用Add_Line更改代码
>接受自动更改为Unicode,仅在最后时刻写入8位文本文件(这在XML和CSV中使用).如果我们想要的话,未来我们仍然可以转向UTF-16文件.

我本来希望定义类似的东西:

function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = TEncoding.ANSI) : boolean;

但编译器抱怨;-)

有可能吗?

解决方法

默认参数必须是编译时常量,但如果您需要更高级的东西,则可以创建重载:
function Add_Line( FileStream : TFileStream; ALine : string) : boolean; overload;
function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding) : boolean; overload;


function Add_Line( FileStream : TFileStream; ALine : string) : boolean;
begin
  Result := Add_Line(FileStream,ALine,TEncoding.ANSI);
end;

您甚至可以添加inline关键字,以获得与默认参数产生的完全相同的生成代码,如果它有效.

注意:除了TEncoding.ANSI和TEncoding.UTF8之外,您似乎不支持任何其他内容.在这种情况下,TEncoding参数似乎有点过分,您可以使用UTF8:Boolean参数(或者重新编写代码以使用任意编码的CodePage).

注2:FileStream.WriteBuffer(AStr [1],Length(ALine));因为长度(ALine)和长度(AStr)不必相同,所以你应该使用长度(AStr).另外,当AStr是空字符串时,AStr [1]可能会导致异常,当AStr不为空时,您可以添加一个特殊情况来仅调用WriteBuffer.

android – 如何在Sqlite中为TEXT列设置默认值?

android – 如何在Sqlite中为TEXT列设置默认值?

我有一张简单的桌子.我正在尝试将默认值放入TEXT列.这是表查询:

"CREATE TABLE book(_id INTEGER PRIMARY KEY AUTOINCREMENT, book_id TEXT NOT NULL DEFAULT '0', book_name TEXT NOT NULL);"   

它创建表但我尝试插入数据时出现问题.我只是尝试给book_name一个书名,因为我预计book_id的列默认值为0.但它没有,它添加了空值,因此行不会插入.我也试过这个查询:

"CREATE TABLE book(_id INTEGER PRIMARY KEY AUTOINCREMENT, book_id TEXT NOT NULL DEFAULT \'0\', book_name TEXT NOT NULL);"     

但问题仍然存在.我已经搜索了堆栈溢出,得到了一些答案,但它们已经老了,现在还不适合我.因此,如何在sqlite中将默认值设置为TEXT列有所改变.提前致谢 :)

编辑
这是insert语句:

database.insert("book", null, cv);    

这里cv是ContentValues的对象,它只包含列book_name的值.

解决方法:

您可以在创建表时为列指定默认值. (看起来好像你不能使用ALTER语句添加默认值,所以你必须重新创建你的表.)

CREATE TABLE your_table_name
(MainContactName TEXT NOT NULL DEFAULT '')

例如,

CREATE TABLE book(_id INTEGER PRIMARY KEY AUTOINCREMENT,book TEXT DEFAULT "abc");

现在看到,默认值设置为“abc”

检查sqllite documentation.

c – 如何初始化具有默认值的类的函数参数

c – 如何初始化具有默认值的类的函数参数

我正在使用 Linux gcc环境,我需要初始化具有默认值的类的函数参数.
当我使用类的临时实例执行此操作时,会发生如下错误:“[argument参数]的默认参数具有type [class name].
例如:
void foo(std::wstring& str = std::wstring())

error:’std :: wstring& amp; str’有类型’std :: wstring’
附:该代码编译时没有任何错误或警告与VC.

我如何初始化默认值?

解决方法

这是不应该编译的.你试图将一个rvalue绑定到一个非const引用.说std :: wstring const& str和它应该工作.

c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?

c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?

我过了一些问题,google搜了一下,
但我找不到答案(那满足了我).

基本上,我理解SingleOrDefault返回null或0(取决于类型).

但是我怎么能让它返回别的东西?

返回myChannels.All.Where(_Channel => _Channel.Guid == this.ParentChannelGuid).SingleOrDefault(_SPECIFICCHANNEL);

所以,我想要_SPECIFICCHANNEL被返回,以防它不是单一的..
可以做到吗

解决方法

这可以用相当简单的方法来实现.如果创建自己的扩展方法比通用的SingleOrDefault更具体,那么编译器将更喜欢更多的类型特定版本.下面是一个示例,显示如何使用简单的Person类(您可以将其复制粘贴到 LINQPad中以快速查看结果):
public class Person
{
    public string Name { get; set; }

    public override string ToString()
    {
        return Name ?? "";
    }
}

public static class PersonExtensionMethod
{
    public static Person SingleOrDefault(this IEnumerable<Person> source)
    {
        var person = Enumerable.SingleOrDefault(source);

        if (person == null)
            return new Person { Name = "Unnamed" };

        return person;
    }
}

public static void Main()
{
    var emptyCollection = new Person[0];
    var nonEmptyCollection = new Person[] { new Person { Name = "Jack" } };

    Debug.WriteLine("Empty collection: " + emptyCollection.SingleOrDefault());
    Debug.WriteLine("Non-empty collection: " + nonEmptyCollection.SingleOrDefault());
}

在上述示例中,SingleOrDefault(IEnumerable< Person>)优先于不太具体的SingleOrDefault T(IEnumerable T).

c# – 如何为函数设置条件参数参数

c# – 如何为函数设置条件参数参数

我有
public void Foo(string name,params object[] args)

我想用一个可以变化的args列表来调用它.我需要做点什么

Foo("yo",a,b,x==42?c);

即如果x是42则传入a,c否则传入a,b.当然,这种语法不起作用.我知道我可以将args编组到List并将列表传递给函数,但是这样做组织代码的方式会非常混乱.那么我可以使用一些语法魔法

编辑:让我添加具体案例

var xml = new XDocument(....,new XElement(....),x==42? new XElement(.....),new XElement(....)
   ....

解决方法

你可以使用if语句:
if (x == 42)
   Foo("yo",c);
else
   Foo("yo",b);

在这种情况下,你不能使用?:运算符(至少在函数调用之外),因为Foo没有返回值. ?:运算符必须评估某些东西,并且必须将某些东西分配给其他东西.

摆脱重复函数调用的另一个选择是使用params的数组或列表:

var parameters = new List<object> { a,b };

if (x == 42)
   parameters.Add(c);

Foo("yo",parameters);

如果你真的想要得到?:在那里,这也会有效:

Foo("yo",x == 42 ? new object[] { a,c } : new object[] { a,b });

有关XDocument / XElement构造函数调用的更具体问题,您可能希望使用Add调用而不是一系列构造函数调用.然后你可以让他们有条件.就像我一样,我认为你也应该通过做这样的事情来做你所要求的事情:

XElement elementPrecedingOptionalElement = new XElement(...);

var xml = new XDocument(....,new XElement(...),elementPrecedingOptionalElement,new XElement(...)
);

if (x == 42)
   elementPrecedingOptionalElement.AddAfterSelf(new XElement(...));

使用Add调用看起来像这样:

XDocument xml = new XDocument();
XElement root = new XElement("Root");
xml.Add(root);

root.Add(new XElement("Item1"));
root.Add(new XElement("Item2"));
if (x == 42)
   root.Add(new XElement("Item2.5"));
root.Add(new XElement("Item3"));
root.Add(new XElement("Item4"));

实际上,最接近你所要求的版本就是这样,这似乎有效:

var xml = new XDocument(....,x == 42
      ? new XElement(...)
      : null,new XElement(...)
);

我们今天的关于delphi – 如何为TEncoding类型的函数参数设置默认值?delphi setlength函数 引用哪个单元的分享已经告一段落,感谢您的关注,如果您想了解更多关于android – 如何在Sqlite中为TEXT列设置默认值?、c – 如何初始化具有默认值的类的函数参数、c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?、c# – 如何为函数设置条件参数参数的相关信息,请在本站查询。

本文标签: