簡體   English   中英

C#正確方法實現泛型方法

[英]C# right way implement generic method

我有一些重復的代碼。 這與DRY原理矛盾。 但是我不知道如何用通用方法代替它。

class Foo
{
    public bool isFirstAttribHasRightValue;
    public bool isSecondAttribHasRightValue;
    private readonly T1 _firstAttrib;
    private readonly T2 _secondAttrib;

    public HashSet<T1> relatedToFirstAttrib;
    public HashSet<T2> relatedToSecondAttrib;
    ...

    public C()
    { ... }

    public T1 GetFirstAttrib(T3 somevalue)
    {
        return (somevalue != othervalue) || isFirstAttribHasRightValue ? _firstAttrib : default(T1);
    }

    public T2 GetSecondAttrib(T3 somevalue)
    {
        return (somevalue != othervalue) || isSecondAttribHasRightValue ? _secondAttrib : default(T2);
    }

    public ClearRelatedToFirst()
    {
        isFirstAttribHasRightValue = true;
        relatedToFirstAttrib.Clear();
    }

    public ClearRelatedToSecond()
    {
        isSecondAttribHasRightValue = true;
        relatedToSecondAttrib.Clear();
    }
    ...
}

我喜歡將重復方法(如ClearRelatedToFirst()ClearRelatedToSecond() ClearRelatedToFirst() ClearRelatedToSecond()ClearRelatedToAttrib<TYPE>() 在那種方法中,我不知道如何選擇需要設置的bool變量或需要清除的hashset集。 與其他重復方法相同。 您能告訴我,我如何重構此代碼? 謝謝。

參見下面的代碼:

class Attribute<T>
{
    public bool isRightValue;
    public HashSet<T> relatedHashSet;
    private T _value;

    public T GetValue(T3 somevalue)
    {
        return (somevalue != othervalue) || isRightValue ? _value : default(T);
    }

    public Clear()
    {
         isRightValue = true;
         relatedHashSet.Clear();
    }
}

class Foo
{
    public Attribute<T1> firstAttribute;
    public Attribute<T2> secondAttribute;
    ...

    public Foo()
    { ... }
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM