代码之家  ›  专栏  ›  技术社区  ›  Pauk

如何将此Delphi集合代码转换为C#?

  •  6
  • Pauk  · 技术社区  · 16 年前

    TOverwriteMode = (omNone, omDateAndSize, omDateOrSize, omDate, omSize, omForce);
    
    ...
    
    if OverwriteMode in [omDateAndSize, omDateOrSize, omDate, omSize] then
    begin
    end;
    

    我用一个 enum ,但用于检查值的代码现在由 if or 这句话对我来说似乎有点冗长。

    public enum FileOverwriteMode
    {
        None,
        DateAndSize,
        DateOrSize,
        Date,
        Size,
        Force,
    }
    
    ...
    
    if ((overwriteMode == FileOverwriteMode.DateAndSize) || 
        (overwriteMode == FileOverwriteMode.DateOrSize) || 
        (overwriteMode == FileOverwriteMode.Date) || 
        (overwriteMode == FileOverwriteMode.Size))
    {
    }
    

    有没有办法用某种C#集等价物来简化它?

    2 回复  |  直到 16 年前
        1
  •  8
  •   Jon Skeet    16 年前

    好吧,你可以做:

    private static readonly HashSet<FileOverWriteMode> ValidOverwriteModes
        = new HashSet<FileOverWriteMode>
    {
        FileOverwriteMode.DateAndSize, FileOverwriteMode.DateOrSize,
        FileOverwriteMode.Date, FileOverwriteMode.Size,
    };
    
    ...
    
    if (ValidOverwriteModes.Contains(overwriteMode))
    {
        // ...
    }
    

    (重命名) ValidOverwriteModes 这取决于真正的含义。)

        2
  •  2
  •   Adriaan Stander    16 年前

    你可以试试类似的东西

    FileOverwriteMode overwriteMode = FileOverwriteMode.DateAndSize;
    if (new HashSet<FileOverwriteMode> 
        { 
            FileOverwriteMode.DateAndSize, 
            FileOverwriteMode.DateOrSize, 
            FileOverwriteMode.Date, 
            FileOverwriteMode.Size 
        }.Contains(overwriteMode))
    {
    }