Tôi cần viết một hàm sẽ nhận một số lượng đối số thay đổi. Tôi đọc một chút về params [], nhưng tôi không nghĩ rằng sẽ làm việc trong trường hợp của tôi. Hàm của tôi cần có một số lượng biến int và sau đó là một giá trị bool tương ứng cho mỗi giá trị. Tôi phải lặp qua từng kết hợp này và nhập chúng vào cơ sở dữ liệu. Chỉ cần tìm ai đó để chỉ cho tôi đi đúng hướng. Cảm ơn.Chuyển số lượng đối số có thể thay đổi
Trả lời
Tôi khuyên bạn nên tạo cấu trúc và sau đó chuyển các cấu trúc đó dưới dạng tham số. Trong ví dụ của tôi, struct của bạn đại diện cho một số điểm của một số loại:
public struct RaceScore
{
public bool FinishedRace;
public int Points;
}
phương pháp chữ ký của bạn sau đó sẽ là:
public void SaveScores(params RaceScore[] scores)
Dưới đây là một ví dụ về SaveScores gọi:
RaceScore score = new RaceScore() { FinishedRace = true, Points = 20 };
RaceScore score2 = new RaceScore() { FinishedRace = false, Points = 15 };
SaveScores(score, score2);
Điều đó đúng - nó sẽ không hoạt động như được mô tả. Những gì bạn có thể làm là sử dụng một cấu trúc để tham gia int và giá trị bool. Params của structs đang làm việc:
public struct IntBoolStruct {
public bool BoolValue;
public int IntValue;
}
public void YourMethod(params IntBoolStruct[] values) {}
EDIT: Tùy thuộc vào những gì bạn muốn làm, cũng có thể giúp bạn.
public void YourMethod(params int?[] values) {}
1 cho các đề nghị nullable. Great điểm - đó có thể là đủ, tùy thuộc vào mục đích của bool. –
Bạn có thể làm điều này với params, nhưng params cần phải là một số class hoặc struct giữ int của bạn + bool của bạn. KeyValuePair<TKey,TValue>
trong thư viện lớp cơ sở sẽ hoạt động, nếu bạn không muốn viết lớp hoặc cấu trúc của riêng bạn. Tuy nhiên, tôi khuyên bạn nên sử dụng IEnumerable<T>
vì việc sử dụng đơn giản hơn nhiều.
Ví dụ:
public void SaveValues(IEnumerable<KeyValuePair<int,bool>> values)
{
foreach(var pair in values)
{
int intVal = pair.Key;
bool boolVal = pair.Value;
// Do something here...
}
}
Điều tương tự cũng sẽ làm việc với params, ví dụ:
public void SaveValues(params KeyValuePair<int,bool>[] values)
này, mặc dù, buộc bạn phải thực hiện một mảng. Sử dụng IEnumerable<T>
sẽ làm việc với một mảng, nhưng cũng sẽ làm việc với danh sách các giá trị, hoặc kết quả truy vấn LINQ, vv Điều này làm cho việc tạo ra gọi hàm này dễ dàng hơn trong nhiều trường hợp.
+1. Giải pháp tốt hơn so với câu trả lời từ điển của tôi, tôi không nên giả định rằng các số nguyên là ID. – Brandon
Điều này nghe có vẻ như nó sẽ là hoàn hảo, nhưng tôi không nghĩ rằng nó có sẵn trong 1.1, đó là những gì tôi bị giới hạn với dự án này. Tôi nên lưu ý điều đó. –
Và một câu trả lời khác: bạn có thể làm điều này với một mảng và tham số đối tượng đơn giản.
class paramstest {
private void _passALot(params Object[] values) {
System.Console.WriteLine(" [foreach]");
foreach (object o in values) {
System.Console.Write(o.ToString() + ", ");
}
System.Console.WriteLine(System.Environment.NewLine + " [for]");
for (int i = 0; i < values.Length; i += 2) {
int? testval = values[i] as Int32?;
bool? testbool = values[i + 1] as Boolean?;
System.Console.WriteLine(String.Format("Int: {0}, Bool: {1}", testval, testbool));
}
}
public void test() {
_passALot(1, true, 2, false, 3, true, "q", false);
}
}
đem lại cho bạn
[foreach] 1, True, 2, False, 3, True, q, False, [for] Int: 1, Bool: True Int: 2, Bool: False Int: 3, Bool: True Int: , Bool: False
Đi qua một từ điển hoặc một danh sách với một struct thích hợp sẽ tốt hơn mặc dù :)
- 1. Số lượng đối số thay đổi mà không có quyền sử dụng các loại giá trị?
- 2. Không thể chuyển đổi đối số javascript
- 3. F # chức năng có thể thay đổi đối số
- 4. chuyển số biến số của đối số
- 5. Làm cách nào để tạo phương thức Java chấp nhận số lượng đối số thay đổi?
- 6. Định dạng chuỗi với số lượng đối số thay đổi trong java
- 7. Đơn giản hóa phương pháp Java với số lượng đối số thay đổi
- 8. JavaScript: tại sao thay đổi biến đối số thay đổi mảng `đối số` '?
- 9. Lỗi phản chiếu Java: Số lượng đối số sai
- 10. Đây có phải là javascript hợp pháp không? Việc chuyển đối số cho hàm và thay đổi đối số là
- 11. Số lượng đối sánh regex
- 12. Chuyển đổi/Định lượng Phạm vi Phao thành Dải số
- 13. Danh sách đối số mẫu có độ dài thay đổi?
- 14. Thay đổi số lượng chủ đề cho máy chủ Jenkins
- 15. Chuyển đổi chuỗi có chứa một số thành số nguyên
- 16. Lặp qua số lượng đối số mảng không xác định
- 17. Các số có thể thay đổi được hay không?
- 18. Thay đổi số hàng read.table sử dụng để xác định số lượng cột trong R
- 19. Chuyển đổi chuỗi số
- 20. Chặn cuộc gọi với các đối số từ va_list khi số đối số và loại của khối có thể thay đổi
- 21. Di chuyển số lượng lớn tệp
- 22. Có thể chuyển tên làm đối số cho mẫu C++?
- 23. Chức năng PHP - Số lượng đối số tối đa
- 24. số javascript- không thể thay đổi
- 25. Thay đổi số lượng dữ liệu jquery mặc định số hàng được hiển thị
- 26. Tại sao tôi có thể thay đổi các hằng số?
- 27. Có thể mất một số thay đổi thông qua git
- 28. Chuyển đổi vị trí tuyệt đối thành số
- 29. Câu lệnh chuyển đổi có thể lấy hai đối số không?
- 30. PHP kiểm tra xem đối tượng có thể được chuyển đổi thành số nguyên không?
Cần lưu ý rằng một cấu trúc thực sự chỉ thích hợp cho một vài biến. Một lớp học phù hợp hơn cho bất cứ điều gì nhiều hơn thế. –
Chỉ vì tò mò, tại sao một cấu trúc không phù hợp với nhiều hơn một vài biến? –
Một phần vì ngữ nghĩa của các cấu trúc: bất cứ khi nào bạn chuyển một phương thức, một bản sao được tạo ra, tốn kém hơn là chuyển một tham chiếu (đó là điều sẽ xảy ra nếu bạn chuyển kiểu tham chiếu) . – Ant