看起來這是可能的,但我找不到有關如何完成它的參考,儘管我已經看到了一些與之密切相關的事情。我有一種特殊類型的課程,需要公共或私人的默認課程。原因是風格;它是一個域聚合,並且在事件存儲重放期間應該使用默認ctor的唯一情況。有很明顯的方法可以解決這個問題,但我試圖鎖定這個特定的類型。無論如何,我希望做的是創建一個屬性,這個屬性可以在類級應用,以強制執行默認ctor的存在。如果沒有找到它,它就不會編譯......或者至少給它一個像[Obsolete()]這樣大的討厭的藍色下劃線。我認爲這對Roslyn來說可能是可行的。任何方向都會有幫助。該解決方案最好與項目一起旅行,而不是需要安裝在視覺工作室上的東西。是否有可能創建一個屬性來破壞條件下的構建?
0
A
回答
1
只是一個簡單的想法,對於公共默認構造函數,你可以利用where T : new()
約束的 - 儘管屬性不能通用,你可以提供typeof(HasDefaultConstructor<MyClass>)
作爲參數的屬性:
public static class HasDefaultConstructor<T> where T : new() { }
public class CheckAttribute : Attribute
{
public CheckAttribute(Type type) { }
}
[Check(typeof(HasDefaultConstructor<MyClass>))]
public class MyClass
{
public MyClass() { }
}
但感覺有點冒險,不得不提供你正在應用屬性的類型,並且不適用於非公共構造函數,但它在編譯時確實失敗,無需任何插件。
+0
謝謝;我有一個類似的想法,但我真的不希望這些域名集合有一個公共ctor。我希望能夠解決這個問題,同時也瞭解更多關於roslyn功能的知識 – Sinaesthetic
相關問題
- 1. 是否有可能編寫一個破壞構建的自定義屬性(如System.ObsoleteAttribute)?
- 2. 是否有可能破壞上下文?
- 3. 是否有可能創建一個類屬性是其他屬性的組合?
- 4. WebActivatorEx全局屬性破壞CI構建
- 5. 是否有可能創建一個OnClickListener來處理ToggleButton和Switch
- 6. 是否有可能在Objective-C中創建@dynamic所有可能的屬性?
- 7. 是否有可能強制TeamCity爲每個SVN提交創建一個構建?
- 8. 創建一個委託時,有一個條件屬性
- 9. 是否有可能在沒有PHP的情況下創建註冊可能性?
- 10. 是否有可能爲CRM 2011構建一個32位插件?
- 11. 是否有可能在不破壞它的情況下重用一個活動?
- 12. 是否有可能創建具有log(n)複雜性的ArrayList屬性的Map?
- 13. 是否可以創建一個Web服務來創建一個XML文件?
- 14. Python屬性是否被破壞?
- 15. 是否有可能創建一個需要邊緣才能創建的頂點
- 16. 是否有可能創建異步構建步驟?
- 17. 是否有可能使用JQuery創建一個html文件?
- 18. 是否有可能創建一個可選擇的選項組
- 19. 是否有可能在android的另一個活動下創建一個活動?
- 20. 是否有可能創建一個沒有AJAX的按鈕?
- 21. 是否有可能創建一個沒有行的派生表?
- 22. rails3是否有可能創建一個沒有限制的model.scope
- 23. 是否有可能創建一個包含單個jar的ClassLoader?
- 24. 是否有可能用bjam做一個out-source的構建?
- 25. 創建一個類來包裝屬性
- 26. 是否可以構建一個可以打破警報循環的Firefox插件?
- 27. 是否有可能在循環中構建並新建一個結構?
- 28. 是否有可能創建一個Android上的Parcelable的HashMap?
- 29. ADT插件是否自動創建一個ant構建文件?
- 30. 是否有可能創建一個臨時python文件並導入該.py文件的類和屬性
是的,聽起來像Roslyn分析儀的完美用例。答案太寬了,所以我建議你開始研究它:在解決方案中創建一個屬性,用來標記這些東西(儘管如果有其他方法可以找到它們,也可以忽略它)和在語義/語法級別註冊分析器,查看它通過的類型的屬性,並在您的條件不滿足時返回錯誤級別診斷。 –
@JeroenVannevel你碰巧知道,分析儀是否作爲組件的一部分出現?換句話說,我可以創建它並在多個解決方案中使用它嗎?否則,感謝至少證實我在正確的軌道上。 – Sinaesthetic
是的,分析儀與解決方案一起打包,因爲它們是作爲nuget參考添加的 –