iT邦幫忙

1

C# 一個物件包含數個數值的方法

c#
  • 分享至 

  • xImage

最近一直在想嘗試縮減程式碼
剛好就有想到一個問題
以Color的ARGB函數來說好了他的code應該是

Color.FromArgb(int R,int G,int B);

那有沒有一種方法是可以寫一個不知道是class還是function的方式讓裡面包含三個int
直接放到Color.FromArgb裡面變成

Color.FromArgb(Function);

目前找不太到關鍵字或是方法,因此想說上來求助。

0930更新
這是我的想法邏輯圖

科科 iT邦好手 8 級 ‧ 2022-09-30 14:16:02 檢舉
方法參數定幾個,引數就要給幾個這是C#基本規則,
如果你真的想要達成參數有2個,呼叫時只給一個引數,
就只能用選擇性參數,但這也不是你想要的效果。
rofellos iT邦新手 2 級 ‧ 2022-10-03 09:47:57 檢舉
我知道你想像python那種,但c#沒你要的東西
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
kw6732
iT邦研究生 4 級 ‧ 2022-09-29 19:09:06

如果使用array是不是能解決你的問題呢?

private void FunThis(string[] args)
{
    /// Other Codes....
        
}

我嘗試將Array放入Function的括號內,但無法直接使用Array的數值

0
bodera
iT邦新手 4 級 ‧ 2022-09-29 19:35:57

如果只是懶得每個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

bodera iT邦新手 4 級 ‧ 2022-09-29 20:13:01 檢舉

不太懂
包成物件一次傳進去 parameter不就是OriginalColor嗎?
如果你懶得定義參數可以直接用dynamic傳 只是效能會差一點

bodera iT邦新手 4 級 ‧ 2022-09-29 20:15:22 檢舉

你不能修改你的function嗎?
將參數多載function(OriginalColor dto)不就好了?

bodera iT邦新手 4 級 ‧ 2022-09-30 12:32:08 檢舉

如果你不能修改自己的function 就自訂義一個多載也可以
static void FromArgb(this Color, OriginalColor dto){
Color.FromArgb(dto.Red, dto.Green, dto.Blue);
}

0
marvinhsu
iT邦新手 4 級 ‧ 2022-09-29 20:25:32

不太確定想要問什麼
不過你不是已經想到用class包了嗎

但無法直接引入

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-09-29 22:05:12

FromArgb(Int32)就好了
連 function/class 都不用寫
/images/emoticon/emoticon13.gif

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);
	}
}
0
Coding小僧
iT邦新手 3 級 ‧ 2022-09-29 22:21:55

我本來想到用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);
        }
0
科科
iT邦好手 8 級 ‧ 2022-09-30 00:40:42

懂你的意思,但就我所知C# 目前沒有這種傳參數的方法,
Color.FromArgb 已經是定好的方法,
跟你約定只能傳入方法定義好的參數規則,
所以你不能簡化別人已經訂好的基本規則,
有想到簡化程式碼很好,但想的方向可能不太對。

科科 iT邦好手 8 級 ‧ 2022-09-30 14:16:13 檢舉

方法參數定幾個,引數就要給幾個這是C#基本規則,
如果你真的想要達成參數有2個,呼叫時只給一個引數,
就只能用選擇性參數,但這也不是你想要的效果。

0
水無痕
iT邦新手 3 級 ‧ 2022-09-30 08:22:08

C# 語言特性是強型別,所以原則上都儘量要定義明確 !

https://ithelp.ithome.com.tw/upload/images/20220930/201370056GfUdzXy9R.png
如果要像上圖這樣這樣,在傳入參數時,定義可以不明確,也不是說不行 !

但主要在於接收參數這一端怎麼寫 !
(當然,原本寫好的 api,就是被限制傳入參數要寫的明確)

如果要自己寫的很通用,可以參考 Linqpad 的 Dump() !

我要發表回答

立即登入回答