最近一直在想嘗試縮減程式碼
剛好就有想到一個問題
以Color的ARGB函數來說好了他的code應該是
Color.FromArgb(int R,int G,int B);
那有沒有一種方法是可以寫一個不知道是class還是function的方式讓裡面包含三個int
直接放到Color.FromArgb裡面變成
Color.FromArgb(Function);
目前找不太到關鍵字或是方法,因此想說上來求助。
0930更新
這是我的想法邏輯圖
如果使用array是不是能解決你的問題呢?
private void FunThis(string[] args)
{
/// Other Codes....
}
如果只是懶得每個function都打一堆參數在上面
可以把參數包成class傳進去再拆開處理
但是要注意NullReferenceException的狀況
例如你的例子
public class OriginalColor{
public int Red{get;set;}
public int Green{get;set;}
public int Blue{get;set;}
}
然後讓你的 FromArgb function去多載這個參數就好了
如果你是指定義function的時候可以傳入無窮參數那就是使用params
例如:
static int test(params int[] nums)
{
return nums.ToList().Sum();
}
Console.WriteLine(test(1, 2));
回傳: 3
這樣的話依然是變成
function(OriginalColor.Red,OriginalColor.Green,OriginalColor.Blue)
我的目的是
finction(parameter)
然後這個parameter就包含了
OriginalColor.Red,OriginalColor.Green,OriginalColor.Blue
用FromArgb(Int32)就好了
連 function/class 都不用寫
FromArgb是一個例子
剛剛更新了文章新增示意圖感謝
是這樣嗎?
using System;
class MyRGB
{
public int R;
public int G;
public int B;
}
public class Program
{
public static void Main()
{
MyRGB rgb = new MyRGB();
rgb.R = 100;
rgb.G = 150;
rgb.B = 125;
MyArgb(rgb);
}
static void MyArgb(MyRGB obj) {
Console.WriteLine("R={0} G={1} B={2}", obj.R, obj.B, obj.G);
//Color.FromArgb(obj.R, obj.G, obj.B);
}
}
我本來想到用tuple,但用到Color.FromArgb時還是得指定裡面的Item1,Item2,Item3,
好像沒有辦法一個方法自動對應各個參數@@
(int,int,int) GetRGB(int num)
{
int r = num * 1;
int g = num * 2;
int b = num * 4;
return (r,g,b);
}
懂你的意思,但就我所知C# 目前沒有這種傳參數的方法,
Color.FromArgb 已經是定好的方法,
跟你約定只能傳入方法定義好的參數規則,
所以你不能簡化別人已經訂好的基本規則,
有想到簡化程式碼很好,但想的方向可能不太對。
C# 語言特性是強型別,所以原則上都儘量要定義明確 !
如果要像上圖這樣這樣,在傳入參數時,定義可以不明確,也不是說不行 !
但主要在於接收參數這一端怎麼寫 !
(當然,原本寫好的 api,就是被限制傳入參數要寫的明確)
如果要自己寫的很通用,可以參考 Linqpad 的 Dump() !